为什么这个匿名函数调用中缺少括号?

Joh*_*hen 15 javascript anonymous-function

我正在读这本书,它有这个代码示例

function getFunction() {
    var result = [];
    for (var i = 0; i < 10; i++) {
        result[i] = function(num) {
            return function() {
                console.log("this is " + num);
            }
        }(i);
    };

    return result;
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但为什么这里的匿名函数没有包含在这样的括号中(function(...))(i);?在哪些情况下可以在匿名函数中省略括号?

Que*_*tin 18

由于函数声明和函数表达式的语法是相同的,因此JS会根据函数的代码告诉您使用哪一个.

要阻止它成为函数声明,您需要在表达式中使用它.将它括在括号中将会做到这一点,但在它之前=也会有一个遗嘱(和许多其他运算符一样).由于这里有一个=,所以括号是不必要的.


zer*_*kms 8

由于它被用作赋值运算符的第二个操作数,因此=JS引擎可以将其视为函数表达式.

当您单独定义匿名函数时不是这种情况:在这种情况下,您需要帮助引擎将其视为表达式而不是语句.