我一直在寻找的一些东西从UglifyJS输出和遇到像下面的一些代码发生了:
var a = 0;
var b = function () {
return function () {
a++;
}(), 'Hello, World'
}();
运行该代码后a
是1
和b
是字符串Hello, World!
。
乍一看,似乎b
将undefined
,因为它看起来像被返回没有返回值的函数的结果,但后跟一个逗号和字符串文字。
为什么这项工作?
为什么不UglifyJS只是执行匿名函数,然后返回Hello, World!
作为下一个声明?
它的工作原理,由于逗号操作符。 从MDN规格:
逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。
这两个功能是IFFYs,他们inmediately执行。
使用表达式的结果逗号运算符是逗号操作者的右手侧。
你有:
return a_function_call(), a_string
...所以你a_string
分配。
首先,请允许我引用MDN的逗号操作 :
逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。
有了这样说,很显然,你的代码是如何计算:
里面的立即执行函数返回用逗号分隔的2个值:
function () { a++; }()
和
'Hello World'
所以,这两个操作数进行评估。 这增加您的变量a
,导致下面的表达式创建函数的返回值b
:
undefined, 'Hello World'
最后,右边的操作数返回作为外部函数的值,从而使b
值'Hello World'
。
退房在JavaScript逗号操作符 。
逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。