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