立即调用函数表达式抛出“对象不是函数”

时间:2014-01-09 21:42:56

标签: javascript iife

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

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

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

但是IIFE会抛出错误:

> TypeError:object不是函数

我尝试复制并粘贴IIFE代码,但没有问题。

1 个答案:

答案 0 :(得分:11)

模块定义在声明结尾处需要一个分号:

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

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

没有它Javascript试图调用该对象:

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

或缩短:

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

当你试图将两个IIFE彼此相邻时,你会遇到同样的问题:

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

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

  

TypeError:undefined不是函数