JavaScript语法(0,fn)(args)

JavaScript语法(0,fn)(args),javascript,Javascript,只要检查一下谷歌的JavaScript代码,我就发现了以下语法: var myVar = function...; (0, myVar)(args); 你知道这个语法的意思吗? 我找不出两者之间的区别 (0,myVar)(args) 和 myVar(args) 举一个确切的例子,我们有 _.x3 = function (a, b) { return new _.q3(20 * b.x + a.B.B.x, 20 * b.y + a.B.B.y) }; 后来 this.ta = new

只要检查一下谷歌的JavaScript代码,我就发现了以下语法:

var myVar = function...;
(0, myVar)(args);
你知道这个语法的意思吗? 我找不出两者之间的区别
(0,myVar)(args)
myVar(args)

举一个确切的例子,我们有

_.x3 = function (a, b) {
    return new _.q3(20 * b.x + a.B.B.x, 20 * b.y + a.B.B.y)
};
后来

this.ta = new _.s3((0, _.x3)(this.fa, this.B.B), 0);

逗号运算符返回最后一个操作数的值,因此
0,myVar
的值与
myVar
的值相同。计算第一个操作数的值,但在本例中,它当然不会完成任何操作

逗号运算符有时在第一个操作数实际执行某些操作时使用,例如在循环中初始化两个变量:

for (i = 0, j = 42; i < 10; i++, j--) ...
(i=0,j=42;i<10;i++,j--)的
。。。

此语法使用逗号运算符,
。它计算所有操作数并返回最后一个操作数的值。在本例中,0只是用作占位符,因此
(0,function(){})
将返回
(function(){})
。求值后,
(args)
部分将调用函数并为其提供参数

评论后编辑:

人们使用这种编码方式的原因是,他们可以快速地或在一行中执行代码。以下是一个例子:

var a = 0,
    b = 1,
    c;

c = ( a++, b++, a + 2 ); // a is added, b is added, and a is added then returned

a; // 1
b; // 2
c; // 3

我问了同样的问题,然后找到了答案,如下所示:

真的是为了

(0, foo.fn)();
请记住,在JavaScript中,当调用
foo.fn()
时,在
fn
内部,
this
绑定到
foo
。如果你使用

var g = foo.fn;
g();
然后,当上面调用
g
时,
this
将绑定到全局对象(
窗口,在web浏览器的上下文中)

那么您是否需要像上面那样定义
g
?你能做些像这样的事情吗

(foo.fn)();
答案是否定的。JavaScript将把它视为
foo.fn()
因为它只是
foo.fn
,具有可以删除的冗余
()

但是有一种方法可以绕过它,那就是使用它

逗号运算符计算每个操作数(从左到右)并返回最后一个操作数的值

所以使用

(0, foo.fn)();
(0,foo.fn)
将被计算为对函数的引用,如上面的
g
,然后调用函数。然后,
未绑定到
foo
,而是绑定到全局对象

因此,以这种方式编写的代码是“剪切绑定”

例如:

var foo={
全名:“彼得”,
sayName:function(){console.log(“我的名字是”,this.fullName);}
};
window.fullName=“闪亮”;
foo.sayName();//我叫彼得
(foo.sayName)(;//我叫彼得

(0,foo.sayName)(;//我的名字是闪亮的
出于好奇,可能会重复,你能发布更多关于它出现在哪里的上下文吗?我正在检查@korko的代码,我编辑了我的答案,如果有帮助的话。可能会重复是的,我知道,但原因实际上是这个的兴趣所在(0,fn)?如果你知道的话?也许这只是一些特定情况下的占位符,但我不认为谷歌会在js中添加无用的字符。@korko:这种构造没有实际的原因,所以这要么是误解,要么是试图混淆代码。我不认为谷歌误解了javascript:D,所以可能会混淆,但我也不认为,它只是添加了一些字符,而Google总是试图删除无用的字符以减小文件大小。@korko:一家大公司生产的代码仍然不比编写代码的人好,因此它也不能避免错误。:)为什么要投否决票?如果你不解释什么是你认为错误的,它不能改善答案。是的,绝对是一个很好的理由,但是。。。0没有任何意义。是否有某种保护、描述或赋予(0,fn)意义的东西,而不仅仅是fn()。对不起,我想不出任何。我相信如果谷歌使用它,一定有原因。JavaScript和往常一样是可预测的:'D