5

我在一个Javascript文件中定义了各种模块:

var module = {/* ... */}

(function(){
    console.log('Invoked');
})()

但是IIFE抛出一个错误:

> 类型错误:对象不是函数

我尝试只是复制和粘贴IIFE代码,没有问题。

4

1 回答 1

13

模块定义在声明的末尾需要一个分号:

var module = {/* ... */}; // <======= Semicolon!

(function(){
    console.log('Invoked');
})()

没有它,Javascript 将尝试调用该对象:

var module = {/* ... */}(function(){console.log('Invoked');})()

或缩短:

var module = {/* ... */}()

尝试编写两个相邻的 IIFE 时,您会遇到同样的问题:

(function(){})()
(function(){})()

这不起作用,因为单个函数声明返回undefined

类型错误:未定义不是函数

于 2014-01-09T21:42:56.387 回答