为什么 IIFE 中的函数表达式必须用括号括起来?

问题描述 投票:0回答:2

我有代码:

function (i)
{
    alert(i);
}(3);

我不明白为什么我看不到警报。

这个语法是什么意思?

为什么这段代码:

( function (i)
{
    alert(i);
}(3))();         

有用吗?

有什么区别?

我错过了什么?

javascript iife
2个回答
10
投票

第一个片段将被解释为函数声明,它需要一个名称,而您的函数没有名称。所以这会导致错误。

用括号包围函数定义使得函数被解释为函数表达式,不需要名称,因此它是有效的 JavaScript。

尽管您似乎在那里进行了两次调用。应该是

(function(i){ alert(i); }(3));

(function(i){ alert(i); })(3); 

通常,您可以将函数表达式放在括号中(所有内容都被计算为表达式)或赋值表达式的右侧(

var a = function...
)。

请参阅 ECMAScript 5 规范第 13 节

函数声明
函数 标识符 ( 形式参数列表opt ) {FunctionBody}

函数表达式 :
函数 标识符opt形式参数列表opt){FunctionBody}


0
投票

()
运算符负责执行函数,因此由
()
包裹的函数表达式会立即执行。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.