是什么意思(0,somefunc)(args)

时间:2014-01-24 14:35:37

标签: javascript function

我一直在浏览一些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的来源)

1 个答案:

答案 0 :(得分:11)

(0, func)()语法确保被调用函数this中的上下文(func)是全局上下文。

例如:

var myContext = {
    func: function () { 
        console.log(this);
    }
};

myContext.func();        // => myContext
(0, myContext.func)();   // => window