我一直在浏览一些gmails javascript(写一个扩展名),而且我已经看到了(0, _.ab)(a)
或各种各样的变体。这实现了什么?
我尝试了一些测试,例如
function a(a,b,c){ console.dir(a+b+c); }
(0, a)(1,2,3)
但是我无法解释为什么他们不会直接拨打a(1,2,3)
。使用(0,a)
调用它有什么奇怪的好处吗?
我已经制作了一个jsperf(http://jsperf.com/direct-vs-0-func-calls)来测试它,而a(1)
vs (0,a)(1)
似乎相同。
编辑:据我所知,Google只会在需要直接调用函数的地方使用它,例如if ((0, _.wa)(a))
(取自gmail的来源)
答案 0 :(得分:11)
(0, func)()
语法确保被调用函数this
中的上下文(func
)是全局上下文。
例如:
var myContext = {
func: function () {
console.log(this);
}
};
myContext.func(); // => myContext
(0, myContext.func)(); // => window