javascript - 使用这种语法的原因是什么 (0, _.Em)();

标签 javascript syntax google-plus-one

在研究 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/

相关文章:

c++ - 类和结构后的分号

google-plus - 链接到 Google PlusOne,不嵌入按钮(出于隐私原因)

HTML5 有效的 Google+ 按钮 - 属性 rel 的错误值发布者

javascript - 如何在指令模板中将嵌入元素的范围更改为 ng-repeat 项范围

java - Java 中硬编码值的句法特征 "long foo = 12L;"样式转换的技术名称是什么?

javascript - process.on 回调中引用错误

php - 编写一个简单的语法分析器

php - Google API 中的评论

javascript - 导航时不在导航栏和无框架中显示页面名称

javascript - 用户脚本计时器错误