2014-01-09 60 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

相關問題