- ベストアンサー
JavaScriptの引数は値渡し?参照?
- JavaScriptの引数について勉強中です。
- 引数の値を交換するコードがうまく機能しない理由について知りたいです。
- 具体的には、この引数が値渡しなのか参照なのか、なぜ交換できないのかを教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> aaa (a1,a2) ;が出力前に書いてあるが、 > そもそも出力しているのは変数なので、 > この関数は出力されていない。 > だから関数を出力すれば、変数の交換は可能である。 「関数を出力する」というのが何を言っているのかわかりませんが、 関数でdocument.writeするという意味なら、aaa関数で入れ替えた後にdocument.writeすれば、 入れ替わって出力されるでしょうね。 function aaa(a,b){ var ttt = a ; a = b ; b = ttt ; document.write(a, b); } もし、関数で引数を操作したいということなら、先の回答で載せたURLにこういうことが書いていないですか? > オブジェクトであるパラメータ、例えばオブジェクト、配列、正規表現などは、関数に 参照によって 渡されます。 function swap_xy(xy){ var temp = xy.x; xy.x = xy.y; xy.y = temp; } c = {'x': 1, 'y': 2} swap_xy(c); document.write(c.x, c.y);
その他の回答 (1)
- hanabutako
- ベストアンサー率54% (492/895)
・この引数は値渡しなのか、参照なのか。 値渡しですね。 ・どうして出来ないのか詳しい理由。 ECMA-262をざっと見て、それらしいものを見つけられなかったので、とりあえずこれで。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope?redirectlocale=ja&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope#.E4.B8.80.E8.88.AC > オブジェクトではないパラメータ、例えば文字列、数値、真偽値などは、 > 関数に 値によって 渡されます。値が関数に渡されると、そこで新しい変数に格納されます。 > 関数が変数の値を変更しても、その変更はグローバルスコープもしくは呼び出し元の関数内に > 反映されません。 つまり、そういう仕様だからとしか言えませんが。
補足
お返事ありがとうございます。 まず最初に修正があります。 出力されるのは1,0と書きましたが、正しくは1,2でした。 すみません。 返答いただいた内容に関してですが、つまり var a1 = 1 ; var a2 = 2 ; はグローバル変数でこれ自体は変更はない。 出力しているのはこの変数自体。 aaa (a1,a2) ;が出力前に書いてあるが、 そもそも出力しているのは変数なので、 この関数は出力されていない。 だから関数を出力すれば、変数の交換は可能である。 と、いうように理解したのですが、正しいですか? お手数おかけしますが、よろしくお願いします。
お礼
お返事ありがとうございます。 おかげさまで理解できました。 ありがとうございました。