2011-10-31 37 views
5

我正在看書Javascript:The Good Parts。我被以下代碼弄糊塗了。爲什麼apply()這裏只有一個參數而不是兩個?

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

正在調用兩個不同的函數。 在第一種情況

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

爲偉大的說明,請參閱

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

應用被調用的方法Array.prototype.slice,,這將傳遞給函數的參數轉換成一個數組。

在函數的第二個函數apply方法被調用。這個功能的用法和細節在這裏明確定義: http://www.devguru.com/technologies/ecmascript/quickref/apply.html

相關問題