2016-09-09 13 views
0
私はコードの下に実行

、なぜこのような結果は何のObject型の関数の引数

function show(a,b) { 
    arguments[0] = 10; 
    arguments[1] = 20; 
    console.log(a,b); 
} 
show();//undefined undefined 
show(2);//10 undefined 

見て、このコードで、なぜですか?何が違う?[10] [0:10]?ブラウザで、このコードの実行

function show(a) { 
    console.log(arguments); 
    arguments[0] = 10; 
    console.log(arguments) 
    console.log(a); 
} 
show();//[] [0: 10] undefined 
show(2);//[2] [10] 10 
+0

どのような言語ですか? JavaScript? "引数"は有用なタグではありません。 –

+0

はい、JavaScriptです – HouJushang

+0

あなたの質問は何ですか? – zerkms

答えて

0

arguments約MDNの説明で基地:

引数オブジェクトは、関数に渡さ 引数に対応する配列のようなオブジェクトです。

そして:あなたの機能を持つので、

このオブジェクトは 関数に渡される各引数のエントリが含まれ、最初のエントリのインデックスは0

から始まる引数[0]は関数で渡された場合はとなり、引数[0]を代入すると変数aに代入することになります。

これが役に立ちます。 torazaburo答えから

更新:

()(ショーのように)で渡されていない場合は、引数は[0]に を別名、および引数を設定しない[0]はaには何の効果もありません。この場合、aは未定義のまま です。

+0

右ですが、仕様を間違って解釈しています。 ** thisオブジェクトには、関数**に渡される各引数のエントリが含まれていることを注意してください。言い換えれば、 'arguments'オブジェクトは、パラメータが宣言されているからではなく、**渡された**場合にのみ、エントリを含みません。これは' show() 'の最初の呼び出しではなく、 'したがって、' arguments [0] 'に割り当てることは、' a 'にも割り当てません**。 –

+0

ありがとう、私は答えを更新しました。 –

0
function show(a,b) { 
    arguments[0] = 10; 
    arguments[1] = 20; 
    console.log(a,b); 
} 

aは(show()のように)に渡されない場合、arguments[0]aないエイリアスを行い、そしてarguments[0]を設定するaに影響を及ぼしません。この場合、aは未定義のままです。

関連する問題