我有代码:
function (i)
{
alert(i);
}(3);
我不明白为什么我看不到警报。
这个语法是什么意思?
为什么这段代码:
( function (i)
{
alert(i);
}(3))();
有效吗?
有什么区别?
我错过了什么?
最佳答案
第一个片段将被解释为函数声明,它需要一个名称,而您的函数没有名称。所以这会导致错误。
用括号包围函数定义使得函数被解释为不需要名称的函数表达式,因此它是有效的 JavaScript。
尽管您似乎在那里进行了两次调用。它应该是
(function(i){ alert(i); }(3));
或
(function(i){ alert(i); })(3);
通常,您可以将函数表达式放在括号中(所有内容都被计算为表达式)或赋值表达式的右侧(var a = function...
)。
参见Section 13 of the ECMAScript 5 specification :
FunctionDeclaration :
function Identifier ( FormalParameterListopt ) {FunctionBody}FunctionExpression :
function Identifieropt (FormalParameterListopt ) {FunctionBody}
关于javascript - 自执行功能不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978219/