-->

为什么这个JavaScript的工作?(Why does this JavaScript work?

2019-07-02 17:10发布

我一直在寻找的一些东西从UglifyJS输出和遇到像下面的一些代码发生了:

var a = 0;
var b = function () {
    return function () {
        a++;
    }(), 'Hello, World'
}();

运行该代码后a1b是字符串Hello, World!

乍一看,似乎bundefined ,因为它看起来像被返回没有返回值的函数的结果,但后跟一个逗号和字符串文字。

为什么这项工作?
为什么不UglifyJS只是执行匿名函数,然后返回Hello, World! 作为下一个声明?

Answer 1:

它的工作原理,由于逗号操作符。 从MDN规格:

逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。

这两个功能是IFFYs,他们inmediately执行。



Answer 2:

使用表达式的结果逗号运算符是逗号操作者的右手侧。

你有:

return a_function_call(), a_string

...所以你a_string分配。



Answer 3:

首先,请允许我引用MDN的逗号操作 :

逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。

有了这样说,很显然,你的代码是如何计算:

里面的立即执行函数返回用逗号分隔的2个值:

function () { a++; }()

'Hello World'

所以,这两个操作数进行评估。 这增加您的变量a ,导致下面的表达式创建函数的返回值b

undefined, 'Hello World'

最后,右边的操作数返回作为外部函数的值,从而使b'Hello World'



Answer 4:

退房在JavaScript逗号操作符 。

逗号运算符它的两个操作数的(左到右),并返回第二操作数的值。



文章来源: Why does this JavaScript work?