自调用函数的括号表示法是否在Javascript中有用?

Eli*_*jah 11 javascript scope functional-programming

当我在Javascript中看到自调用匿名函数的示例时,我感到困惑,例如:

(function () { return val;}) ();
Run Code Online (Sandbox Code Playgroud)

此语法与以下内容之间是否存在差异:

function() { return val;} ();
Run Code Online (Sandbox Code Playgroud)

如果有人可以给我一个具体的区别,这将有助于解决一直困扰我多年的问题......

Bre*_*ton 14

Javascript没有块作用域,因此这是一种创建不会污染全局名称空间的临时本地作用域的方法.括号有两个用途:

  1. 如果它们丢失了,javascript的一些实现会被淘汰.
  2. 它向读者发出信号,告诉他们正在发生与正常功能声明不同的事情.因此,作为惯例,它表示此函数正用作范围.

见这里:http: //peter.michaux.ca/articles/an-important-pair-of-parens


Ste*_*son 6

在Safari 4中,以下代码(没有括号)导致"SyntaxError:Parse error":

function() { alert("Test"); }();
Run Code Online (Sandbox Code Playgroud)

...但以下代码按预期工作:

(function() { alert("Test"); })();
Run Code Online (Sandbox Code Playgroud)

更新:我还尝试了Firefox 3中的代码(通过Firebug),它的行为就像Safari一样.