javascript自执行函数 - 不同的语法

Chr*_*ris 3 javascript syntax

我见过两个版本的自执行javascript函数:

(function() { ... })()
Run Code Online (Sandbox Code Playgroud)

(function() { ... }())
Run Code Online (Sandbox Code Playgroud)

注意函数执行"()"的不同位置

这两者有区别吗?

Poi*_*nty 5

有很多方法可以使你正在做的事情产生影响,严格来说,这个话题与闭包的主题只有切线关系.

问题是:在JavaScript中,function关键字有两个不同的用途:

  1. 它引入了一个函数声明语句,它类似于一个var语句(变量声明)但是对于一个函数;
  2. 它在较大的表达式的上下文中引入了函数文字表达式.

现在的问题是,当解析器function在语句的开头看到时,它假定你要声明一个函数; 也就是说,上面的案例1.声明函数时,不能在同一语句中调用它; 函数声明语句只是声明函数.

因此,如果您想要的是包含函数创建及其立即调用的语句,则必须将解析器放在解析表达式的心情中.将整个事物放在括号中只是这样做的一种方式.

任何"技巧"都会使解析器相信它所看到的是一个表达式语句将会:

var dummy = function() { ... whatever ... } ();

!function() { ... whatever ... } ();

0 + function() { ... whatever ... } ();
Run Code Online (Sandbox Code Playgroud)

所有这些以及无数其他示例都设置了这样的结果:当解析器看到function关键字时,它会在表达式的中间执行.

如果Eich先生为函数对象mid-expression(例如lambda)的实例化选择了一个不同的关键字,那就没有问题了,因为你可以说

lambda () { ... whatever ... } ();
Run Code Online (Sandbox Code Playgroud)

然而,他没有.