我有代码:
function (i)
{
alert(i);
}(3);
我不明白为什么我没有看到警报。
这种语法是什么意思?
为什么这段代码:
( function (i)
{
alert(i);
}(3))();
有效吗?
有什么区别?
我想念的是什么?
答案 0 :(得分:10)
第一个代码段将被解释为函数声明,它需要一个名称,而您的函数没有名称。所以这会导致错误。
用括号括起函数定义使得函数被解释为函数表达式,它不需要名称,所以它是有效的JavaScript。
虽然看起来你正在那里进行两次调用。它应该是
(function(i){ alert(i); }(3));
或
(function(i){ alert(i); })(3);
通常,您可以在括号中使用函数表达式(一切都在那里计算为表达式)或在赋值表达式的右侧(var a = function...
)。
请参阅Section 13 of the ECMAScript 5 specification:
功能声明:
功能 标识符( FormalParameterList opt ){ FunctionBody }FunctionExpression :
功能 标识符 opt ( FormalParameterList opt ){ FunctionBody }
答案 1 :(得分:0)
()
- 运算符负责执行一个函数,因此由()
包装的函数表达式会立即被执行。