为什么这个JavaScript有效?

knp*_*wrs 19 javascript uglifyjs

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

var a = 0;
var b = function () {
    return function () {
        a++;
    }(), 'Hello, World'
}();
Run Code Online (Sandbox Code Playgroud)

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

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

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

Wou*_*r J 25

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

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

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

  • @ j08691:我认为他的意思是"IIFE"或"立即调用函数表达式".当你创建一个函数并立即调用它时,就像`function(){}()`.但是,并非*所有*功能都是"IIFE". (4认同)
  • @Rocket,我猜Wouter意味着*示例代码上的两个*函数都是IIFE. (3认同)

Que*_*tin 6

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

你有:

return a_function_call(), a_string
Run Code Online (Sandbox Code Playgroud)

......所以你被a_string分配了.