3
我看了這個片段的權威指南中的不同應用(:有什麼直接的函數調用,調用(間))在封閉
function not(f)
{
return function()
{
var result=f.apply(this,arguments);
return !result;
}
}
我無法理解的是,因爲該功能f
在關閉,它的this
已經是this
,爲什麼不直接使用這個片段var result=f(arguments);
?
...
while(i>len)
{
if(i in a)
accumulator=f.call(undefined,accumulator,a[i],i,a);
i++;
}
...
爲什麼筆者使用()調用而不是直接調用:
我甚至未定義/ null作爲,我認爲完全可以用直接調用替換第一個參數讀一些call
S'直接函數調用和call()
之間有沒有區別,因爲它是第一個參數?
@nnnnnn謝謝!非常清楚的解釋!但是第二個片段中的'call()'具有undefined作爲第一個參數呢? – LotusH
在這種情況下,如果代碼不是嚴格模式,'undefined'被全局對象替代(但只在調用本地函數對象的地方,它可能不適用於內置方法或主機方法) 。見ECMA [§15.3.4.4](http://ecma-international.org/ecma-262/5.1/#sec-15.3.4.4)和[§13.2.1](http://ecma-international.org/ ecma-262/5.1 /#sec-13.2.1) – RobG
是的,RobG說的。除了上下文外,我無法說明爲'.call()'顯示的代碼片段可能帶來的好處。 (在其他代碼片段中似乎與使用'.apply()'的原因完全無關。) – nnnnnn