繁体   English   中英

为什么这个JavaScript有效?

[英]Why does this JavaScript work?

我正在查看来自UglifyJS的一些内容的输出,并发生在以下代码中:

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

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

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

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

它由于逗号运算符而起作用。 从MDN规范:

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

这两个函数都是IFFY,它们是在中间执行的。

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

你有:

return a_function_call(), a_string

...所以你分配了a_string

首先让我在逗号运算符上引用MDN

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

话虽如此,很明显,您的代码如何评估:

在立即执行的函数内,您返回以逗号分隔的2个值:

function () { a++; }()

'Hello World'

因此评估两个操作数。 这会增加变量a并导致以下表达式为创建b的函数的返回值:

undefined, 'Hello World'

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

在JavaScript中查看逗号运算符

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM