2017-02-23 80 views
1

有人可以解釋爲什麼會發生這種情況嗎?立即調用函數表達式導致錯誤?

如果我寫在文件命名爲喜歡test.js這樣的事情,

const anyObject = {} 
(function(){ 
    console.log('hello world!') 
}()) 

$node test.js

然後在控制檯中運行它通過控制檯,hello world!將被打印,但隨後與這個: TypeError: (intermediate value) is not a function

我不知道究竟發生了什麼,我覺得不知何故,節點將函數表達式作爲函數調用表達式來使用?

我使用節點v6.9.1

+2

爲所有的愛,使用分號, –

+0

檢查您的括號')' – AurA

+0

IIFE的通常演示像';(function()...'...因爲懶惰的程序員不使用分號,他們應該... –

回答

6

你可以使用void調用無分號。

這會迫使表達式評估並返回undefined

const anyObject = {} 
 
void (function() { 
 
    console.log('hello world!') 
 
}())

它的工作原理,即使沒有外部括號。

const anyObject = {} 
 
void function() { 
 
    console.log('hello world!') 
 
}()

2
  • 使用半冒號
  • 語法是在你的IIFE不同

const anyObject = {}; 
 
(function(){ 
 
    console.log('hello world!'); 
 
})();

相關問題