2009年11月18日
JavaScript: argumentsは配列じゃない、配列のメソッドを使うには
argumentsは配列じゃないため、配列のメソッドは
使えません。ということは本を読んだとき当たり前だと思ったんですが、
実際コードに落としたときは
自然とargument.slice()を書いちゃいました。
argumentsで配列のメソッドを使うには
Array.prototype.<配列のメソッド>.call(arguments,<パラメータ>)
```js Array.prototype.slice.call(arguments, 2) ```上記の意図としてはarguments.slice(2)の表現に近いです。
argumentsはarray-likeオブジェクト
ここでちょっとargumentsの基本知識を復習します。
length属性もあるし、[]でindex指定のオブジェクトを参照できますけど、
argumentsは配列に似ているオブジェクトだけです。
予約語
Technically, argumentsは予約語ではないですが、
予約語として認識してよいです。
つまりargumentsという変数は作成しないでってことです。
```js function foo(x){ alert(x); var arguments; arguments[0] = null; //xの値が変更されちゃう alert(x); // null が出力される } ```
callee Property
Refers to the function that is currently being executed.
今実行中のファクションを参照しています。
```js function(x) { if (x <= 1) return 1; return x * arguments.callee(x-1); } ```