lxa*_*lxa 58 javascript anonymous-function
为什么这个:
(function () {
//code
}());
Run Code Online (Sandbox Code Playgroud)
还有这个:
var f = function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
工作,而这:
function () {
//code
}();
Run Code Online (Sandbox Code Playgroud)
才不是?它看起来完全一样 - 定义了匿名函数,并立即调用.有人可以从JavaScript/ECMAScript标准中引用它来解释这个吗?
更新:感谢大家的答案!所以这是关于函数表达式与函数声明的关系.请参阅此Stack Overflow答案,ECMAScript标准第13节,以及这篇精彩文章:命名函数表达式揭秘.
回顾一下答案:
第一个片段被解释为表达式,因为应用了分组运算符()- 请参阅ECMAScript标准第11.1.6节.
在第二个片段中,函数被解释为表达式,因为它位于赋值运算符的右侧部分=.
第三个片段没有任何允许解释器将函数作为表达式读取的东西,因此它被认为是一个声明,如果没有标识符则无效(Gecko允许它通过,但它会跟随下面的()分组操作符(因为它认为) )什么都不适用).
hug*_*omg 21
前两个案例显示函数表达式,并且可以出现像(1+1或x*f(4))这样的表达式出现的任何位置.就像1+1评估一样2,这些表达式如何评估相应的函数.
第三种情况是函数declation 语句,可以出现在任何可以有其他语句的地方(比如一个if或while语句).
试图通过Funcion声明语句声明一个匿名函数没有太大意义,因为否则之后没有人会得到对该函数的引用.
你需要开的原因(或var x =在在前两种情况下一样的是,他们迫使下位表达式上下文来解析.(只是想想你怎么做var x = if ...,例如).如果您只是将它function作为第一个被解析为您不想要的声明语句.
| 归档时间: |
|
| 查看次数: |
24474 次 |
| 最近记录: |