我实现了forEach
函数:
function forEach(arr, fn) {
for (var i = 0; i < arr.length; i++) {
fn.call({}, arr[i], i);
}
}
我困惑的是关于
fn.call({}, arr[i], i);
第一个参数是传递空,就像上面的
{}
更好或在
this
中传递fn.call(this, arr[i], i);
更好?还是没关系
最佳答案
这很重要。 .call()
的第一个参数是被调用函数中用于this
的值。因此,谈论什么价值是“更好”是没有意义的。传递正确的值是您所需要的值,以便调用的函数正常运行。
例如,如果要在Array原型上调用一个函数,则该函数内的this
值必须类似于数组(“ length”属性和数字索引属性)。从而:
var sneaky = {
"0": "hello",
"1": "world",
"length": 2
};
alert( Array.prototype.join.call(sneaky, " - ") ); // "hello - world"
之所以可行,是因为该函数希望
this
引用要连接的数组。除了对
this
有期望的功能之外,还有其他许多示例。在您的示例代码中,传递{}
会给被调用函数一个对该新创建的空对象的this
引用。那行得通吗?我不知道,因为该功能可能会发生任何事情。除了查看代码(或信任文档)之外,也无法找到答案。如果您只知道它是一些随机的任意函数,那么{}
是合理的猜测,尽管undefined
可能会更好,以强制早期失败。关于javascript - Javascript:对函数调用方法的用法感到困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17791836/