2014-01-09 35 views
3

我限定在一个Javascript文件的各种模块:立即调用函数表达式抛出“对象是不是一个函数”

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

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

然而IIFE引发错误:

>类型错误:对象是不是功能

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

+0

的[为什么这个分组操作符+函数调用立刻(可能重复http://stackoverflow.com/questions/14810951/why-is-this-grouping-operator-function-immediatly-invoked) –

+0

您应该在语句后始终使用分号 - https://stackoverflow.com/a/444082/1766230 – Luke

回答

10

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

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

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

没有它,JavaScript是试图调用该对象:

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

或缩短:

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

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

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

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

TypeError: undefined is not a function

相关问题