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

时间:2012-03-16 10:17:53

标签: javascript syntax google-plus-one

在调查google plusone脚本时,我多次看到以下语法:

(0, _.Em)();

假设_.Em是一个函数,上面的语句将导致调用该函数,这是非常明显的。另一方面,如果未定义,那么结果是否与简单地_.Em()相同?

任何人都可以了解使用这种语法背后的想法吗?

1 个答案:

答案 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中测试两种语法之间的差异。