将调用函数分配给变量然后调用它

时间:2015-07-10 15:42:54

标签: javascript

我正在努力弄清楚为什么跟随不起作用:

> var foo = Array.prototype.forEach.call;
< undefined

> typeof foo;
< "function"

> foo([1, 2, 3], function (y) {console.log(y);});
< Uncaught TypeError: foo is not a function
    at <anonymous>:2:1
    at Object.InjectedScript._evaluateOn (<anonymous>:895:140)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:828:34)
    at Object.InjectedScript.evaluate (<anonymous>:694:21)

虽然替代方法运作得很好:

var foo = Array.prototype.forEach;
foo.call([1, 2, 3], function (y) {console.log(y);});

我会很感激任何提示。

1 个答案:

答案 0 :(得分:2)

fn.call总是需要一个上下文来配合它。您无法将其分配给变量,因为您在不包含任何上下文的情况下引用Function.prototype.call。请记住,Function.prototype.call()不是装饰器,而是函数的属性,可帮助您处理正确的上下文执行。当你打破参考时,你已经消除了它的目的。

var foo = Array.prototype.forEach.call;
foo === Function.prototype.call //true
Array.prototype.forEach.call === Array.prototype.filter.call //true
Array.prototype.forEach.call === Object.prototype.hasOwnProperty.call //true