我正在 JavaScript 文件中定义各种模块:
var module = {/* ... */}
(function(){
console.log('Invoked');
})()
但是 IIFE 抛出错误:
类型错误:对象不是函数
我尝试仅复制并粘贴 IIFE 代码,没有问题。
模块定义需要在声明末尾加分号:
var module = {/* ... */}; // <======= Semicolon!
(function(){
console.log('Invoked');
})()
没有它,Javascript 会尝试调用该对象:
var module = {/* ... */}(function(){console.log('Invoked');})()
或缩写:
var module = {/* ... */}()
当尝试相邻编写两个 IIFE 时,您会遇到同样的问题:
(function(){})()
(function(){})()
这不起作用,因为单个函数声明会返回
undefined
:
类型错误:未定义不是函数