JavaScript模式:函数调用的上下文

时间:2013-01-23 21:51:19

标签: javascript function call

我从一开始就有大量的JavaScript函数调用,如下所示:

THING.someFunction.call(THING);

在我看来,应始终相当于:

THING.someFunction();

这两个调用总是相同吗?旧版本的JavaScript怎么样?

在我看来,第一行代码中第二个THING的目的是在this内设置上下文(someFunction)。但默认情况下,该函数内的上下文应该是THING,对吗?

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

var THING = function () {
    // private vars

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

有关详细信息,请参阅this MDN doc