在调查google plusone脚本时,我已经看到以下语法多次:
(0,_.Em)();
假设_.Em是一个函数,上面的语句将导致调用该函数,这很明显.另一方面,如果没有定义,那么结果与简单的_.Em()是一样的呢?
任何人都可以了解使用这种语法背后的想法吗?
解决方法
基本上,这种语法允许在窗口对象的上下文中调用_.Em(),而不是_.
假设你有这个代码:
Foo = function() { this.foo = "foo"; }; Foo.prototype.Em = function() { alert(this.foo); }; var _ = new Foo();
发出_.Em()将导致在_的上下文中调用Em().在函数内部,这个关键字将引用_,所以将打印出foo.
Issuing(0,_.Em)()将方法调用与对象分离,并在全局上下文中执行调用.在函数内部,该关键字将引用窗口,因此未定义将被打印,因为窗口没有foo属性.
您可以测试this fiddle中两种语法之间的差异.