在研究 google plusone 脚本时,我多次看到以下语法:
(0, _.Em)();
假设 _.Em
是一个函数,上面的语句将导致调用该函数,这是非常明显的。另一方面,如果它是未定义的,结果是否与简单 _.Em()
相同?
任何人都可以阐明使用这种语法背后的想法吗?
最佳答案
基本上,此语法允许在 window
对象的上下文中调用 _.Em()
,而不是 _
。
假设您有以下代码:
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中测试两种语法之间的差异。 .
关于javascript - 使用这种语法的原因是什么 (0, _.Em)();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39896515/