【发布时间】:2015-11-01 19:35:09
【问题描述】:
我正在阅读 JavaScript IIFE 和到目前为止的理解概念,但我想知道外面的括号。具体来说,为什么需要它们?例如,
(function() {var msg='I love JavaScript'; console.log(msg);}());
效果很好,但是
function() {var msg='I love JavaScript'; console.log(msg);}();
产生语法错误。为什么?关于 IIFE 的讨论很多,但我没有看到关于为什么需要括号的明确解释。
【问题讨论】:
-
一句话:模棱两可。我不记得确切的术语,但
function() {...}是一个声明,(function() {...})是一个表达式,表达式是可调用的,意思是()有效。 -
仅供参考,这也有效 ~
+function() { ... }()和!function() { ... }() -
一个是解释器希望评估的函数 express。另一个是函数定义,解释器看起来只是将函数定义添加到当前范围。括号使其成为您想要的函数表达式。之所以会这样,是因为语言语法的细节。
-
@Phil,这是正确的,因为 + 和 !运算符将语句标记为表达式:)
-
这些 cmets 非常适合解决我的困惑 - 如果 function(){...} 是一个声明,那么 function(){...}() 不是一个表达式?或者是因为 function(){...}() 可以返回一个声明,因此需要外部括号来消除 @Neit 评论的歧义?
标签: javascript iife