我见过两个版本的自执行javascript函数:
(function() { ... })()
Run Code Online (Sandbox Code Playgroud)
和
(function() { ... }())
Run Code Online (Sandbox Code Playgroud)
注意函数执行"()"的不同位置
这两者有区别吗?
有很多方法可以使你正在做的事情产生影响,严格来说,这个话题与闭包的主题只有切线关系.
问题是:在JavaScript中,function关键字有两个不同的用途:
var语句(变量声明)但是对于一个函数;现在的问题是,当解析器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)
然而,他没有.
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |