2011-10-31 13 views
5

私はJavascript:The Good Partsの本を読んでいます。そして、私は次のコードで混乱しています。apply()はなぜ2つではなく1つの引数しか取らないのですか?

Function.method('curry', function () { 
    var slice = Array.prototype.slice, 
     args = slice.apply(arguments), 
     that = this; 
    return function () { 
     return that.apply(null, args.concat(slice.apply(arguments))); 
    }; 
}); 

slice.apply(arguments)nullどこにありますか?

答えて

5

argumentsは、関数の引数ではなく、コンテキスト(this)として渡されています。

arguments.slice()が存在しないことを除いて、arguments.slice()に相当します。

2

これは、引数のない配列でslice()を呼び出すのと同じです。つまり、元の配列のすべての要素を含む配列を返します。この場合、 'arguments'は真の配列ではないため、Array.prototype.sliceを呼び出して実際には1になります。

1

2つの異なる機能が呼び出されています。偉大な説明のための最初のケース

var slice = Array.prototype.slice, 
args = slice.apply(arguments), 

では

http://blog.sebarmeli.com/2010/11/12/understanding-array-prototype-slice-applyarguments/

を参照Array.prototype.slice,の方法は、アレイに関数に渡された引数を変換された、起動されて適用されます。

第2の関数では、関数の適用メソッドが呼び出されています。この関数の使用法と詳細はここでよく定義されています http://www.devguru.com/technologies/ecmascript/quickref/apply.html

関連する問題