6

从一开始我就有大量的 JavaScript,函数调用是这样写的:

THING.someFunction.call(THING);

在我看来,这应该始终等同于:

THING.someFunction();

这两个调用总是等价的吗?旧版本的 JavaScript 呢?

在我看来THING,第一行代码中第二个的目的是在this里面设置 context() someFunction。但是该函数内部的上下文应该已经是THING默认的了,对吧?

为了清楚起见,THING定义如下:

var THING = function () {
    // private vars

    return{
        // code
        someFunction : function () {
            // code
        }
    };
}();
4

2 回答 2

1

是的,它们是等价的。而且我不知道任何没有它们的 JavaScript 版本(但是,call似乎已在 1.3 中添加)。

于 2013-01-23T21:55:00.590 回答
0

它们在技术上是相同的。但它们在异步编程中的行为也略有不同。call() 用于通过传递作用域作为参数来调用函数。这提供了一种在回调和延迟执行(setTimeout、setInterval)中调用定义函数的便捷方式。如果您使用过任何 JS 库,您会注意到 $.proxy 或 _.bind,这些是实现 call(scope); 的别名;

有关更多信息,请参阅此 MDN 文档

于 2013-01-23T22:43:43.870 回答