私はArray.prototype.slice.call(arguments, 1)
と呼んで、配列の末尾を返すことができます。Javascript 'arguments'キーワード
なぜこのコードでは[2,3,4,5]
が返されませんか?
function foo() {
return Array.prototype.slice.call(arguments,1);
}
alert(foo([1,2,3,4,5]));
私はArray.prototype.slice.call(arguments, 1)
と呼んで、配列の末尾を返すことができます。Javascript 'arguments'キーワード
なぜこのコードでは[2,3,4,5]
が返されませんか?
function foo() {
return Array.prototype.slice.call(arguments,1);
}
alert(foo([1,2,3,4,5]));
だけ引数—配列を渡しているので。
てみalert(foo(1,2,3,4,5));
引数は、JavaScriptで0から番号なので、あなたが1であなたのスライスを開始し、1つの引数を渡すとき、あなたは何を取得しています。
arguments
オブジェクトが機能から「リーク」できるように最適化を妨げる可能性があることに注意してください。 arguments
と仮パラメータの間のエイリアシングのため、arguments
オブジェクトがどこか別の場所に送信された場合、オプティマイザは関数の静的解析を実際に行うことができません。
arguments
は{0: [1,2,3,4,5], length: 1}
であり、1つの要素を持つ配列のようなオブジェクトです。 1つの要素を持つ配列の末尾が空の配列です。
いずれ関数の定義変更:
function foo(arr) {
return Array.prototype.slice.call(arr,1);
}
を有するか、関数を呼び出す:(
foo(1,2,3,4,5);
arguments
引数およびその他のいくつかのプロパティを示し、アレイ状の物体であるよう現在の関数への参照としてarguments.callee
)。この場合
、あなたのarguments
オブジェクトは、次のようになります。
arguments {
0: [1,2,3,4,5],
length: 1,
other properties here
}
私は、これはあなたが非常によく見ている動作を説明してだと思います。関数呼び出しで配列括弧を削除するか、arguments[0]
を使用してarryにアクセスしてください。
引数をコピーする方が良いでしょうか? '関数foo(){ \t var args =引数; \t戻り値Array.prototype.slice.call(args、1); } ' – Eric
' arguments'キーワードのMDN記事は、あなたが言及したこの最適化問題を記述しています:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments – Eric