2016-04-15 24 views

回答

4

基本上call()期望參數需要以逗號分隔格式傳遞,而apply()需要參數作爲數組。所以你看到的例子可能不需要參數作爲數組傳遞。這是選擇的問題,

一個簡單的例子:

Math.max.call(Math, 1,2,3,4,5); 
//is same as 
Math.max.apply(Math, [1,2,3,4,5]); 

而且在某些特殊情況下this論據call/apply將作爲object傳遞和原來的參數將被忽略。像,

var x = document.querySelectorAll("div") 
Array.prototype.slice.call(x); 
//This will convert the nodeList to an array. 

將上述樣品將訪問傳遞this(一個nodeList)的length屬性和將構建一個新的數組,並將其返回。您必須閱讀slice的算法以瞭解更多信息。內部有this is how the slice will works,我回答。

+1

卓越的例子!謝謝。 –

1

兩者都是一樣的,在一個你可以pass comma separated arguments和另一個array。我沒有看到任何其他差異,如果在bind中可以使用later context的返回函數,而內部函數仍具有外部函數scope

1

.call相當於.apply只要您不傳遞除this(即第一個參數)以外的參數。選擇另一個只是一個慣例。

相關問題