测验题

解释这为什么不能以IIFE工作: `function foo(){ }();`. 为了使它成为一个IIFE,需要作出哪些改变?

Topics
JAVASCRIPT
在GitHub上编辑

IIFE 是 Immediately Invoked Function Expressions 的缩写,即立即调用函数表达式。 JavaScript 解析器读取function foo(){ }(); 作为 function foo(){ }(); , 如果前者是一个 函数声明, 而后者是一对括号, 则试图调用函数, 但没有指定名称, 因此,它抛出Uncaught SyntaxError: Unexpected token )

这里有两种方法修复它,涉及添加更多括号:(function foo(){ })()(function foo(){ }())function 开头的语句被认为是函数声明;通过将这个函数包裹在"() "中,它成为一个函数表达式,然后可以用后面的()执行。 这些函数不会在全局范围内暴露,如果你不需要在代码里提及,你甚至可以省略它的名称。

您也可以使用 void 操作符:void function foo(){ }();. 不幸的是,这种做法有一个问题。 对给定表达式的执行结果总是`undefined',所以如果你的 IIFE 函数返回任何东西,你就不能使用它。 举个例子:

const foo = void (function bar() {
return 'foo';
})();
console.log(foo); // undefined
在GitHub上编辑