Skip to content
登录后刷题更便捷

请解释下面代码为什么不能用作 IIFE:`function foo(){ }();`,需要作出哪些修改才能使其成为 IIFE?

难度:

IIFE(Immediately Invoked Function Expressions)代表立即执行函数。 JavaScript 解析器将 function foo(){ }();解析成function foo(){ }();。其中,前者是函数声明;后者(一对括号)是试图调用一个函数,却没有指定名称,因此它会抛出Uncaught SyntaxError: Unexpected token )的错误。

修改方法是:再添加一对括号,形式上有两种:(function foo(){ })()(function foo(){ }())。以上函数不会暴露到全局作用域,如果不需要在函数内部引用自身,可以省略函数的名称。

你可能会用到 void 操作符:void function foo(){ }();。但是,这种做法是有问题的。表达式的值是undefined,所以如果你的 IIFE 有返回值,不要用这种做法。例如:

js
const foo = void (function bar() {
  return "foo";
})();

console.log(foo); // undefined
参考

内容仅供参考,难免有不恰当的地方,如果有问题欢迎及时反馈
部分内容来自网络,如果不慎侵犯您的权益,请联系我们,以便及时删除侵权内容