2017-02-23 57 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!'); 
 
})();

相关问题