为什么这不起作用?

function init() {
    // var x = ...
    // some more code ..
}();


抛出:SyntaxError: Unexpected token )

为何工作正常?

function init() {
    // var x = ...
    // some more code ..
}(init)();


我只想要一个函数,里面有它自己声明的vars,但是我不想再访问该函数。最后一个按照我说的做,但是为什么行得通呢?我都无法知道我是如何提出该解决方案的。

最佳答案

为什么这不起作用?


您试图立即调用函数声明(function作为语句)而不是函数表达式(function作为运算符)。您需要做一些事情以使解释器将其作为表达式读取。




  为何工作正常?


空格在JavaScript中意义不大,因此

function foo() {
}(foo)();


是相同的

function foo() {
}
(foo)();


是相同的

function foo() {
}
foo();


即您只是像正常声明的函数一样调用它



编写命名的IIFE的最佳实践是

(function foo() {
    // foo's body
}());


对于匿名IIFE,只需删除名称并保持其余名称不变

09-25 18:32
查看更多