2013-10-18 124 views
2

我已經開始由John Resig的書學純JS,發現有()函數調用還不是很清楚例如:JavaScript調用()函數

function forEach (list, callback) { 
    for (var i = 0; i < list.length; i++) { 
     callback.call(list[i],i) 
    }; 
} 

var strings = [ 'hello', 'world', '!']; 

forEach(strings, function(index){ 
    console.log(strings[index]); 
}); 

它是如何工作的?有人可以解釋嗎?

+2

您對打電話瞭解多少?即你的起點是什麼?您是否閱讀過文檔,例如在[MDN]上(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call)?要調用的第一個參數是您的方法的this指針,第二個(以及後續)是作爲參數傳遞給您的函數的指針。 – Rup

回答

3

call方法用於調用特定上下文中的函數(換句話說,具有this的特定值)。該示例調用在當前列表項的上下文中callback功能,並通過在i值:

forEach(strings, function(index){ 
    console.log(this); // "String ['hello']" etc... 
    console.log(index); // "0" etc... 
}); 

如果callback功能被正常調用(不call方法)然後,語境將任一全局對象或undefined(如果代碼以嚴格模式運行)。