自我执行功能不起作用?

时间:2011-11-02 09:38:27

标签: javascript

我有代码:

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

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

这种语法是什么意思?

为什么这段代码:

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

有效吗?

有什么区别?

我想念的是什么?

2 个答案:

答案 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)

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