我从一开始就有大量的JavaScript函数调用,如下所示:
THING.someFunction.call(THING);
在我看来,应始终相当于:
THING.someFunction();
这两个调用总是相同吗?旧版本的JavaScript怎么样?
在我看来,第一行代码中第二个THING
的目的是在this
内设置上下文(someFunction
)。但默认情况下,该函数内的上下文应该是THING
,对吗?
为了清楚起见,THING
定义如下:
var THING = function () {
// private vars
return{
// code
someFunction : function () {
// code
}
};
}();
答案 0 :(得分:1)
是的,它们是等价的。而且我不知道他们没有的任何JavaScript版本(但是,call
似乎已添加到1.3)。
答案 1 :(得分:0)
技术上它们是相同的。但它们在异步编程中的行为也略有不同。 call()用于通过传递作为参数的作用来调用函数。这提供了一种在回调和延迟执行中调用已定义函数的便捷方法(setTimeout,setInterval)。如果您使用过任何JS库,您会注意到$ .proxy或_.bind,这些是实现调用的别名(范围);
有关详细信息,请参阅this MDN doc。