我知道 var a=+function(){}();
=== var a=(function(){})();
but var a=function(){}();
是个什么鬼。也是iife的一种吗?很少用这种方式,但也有些人用的。
我知道 var a=+function(){}();
=== var a=(function(){})();
but var a=function(){}();
是个什么鬼。也是iife的一种吗?很少用这种方式,但也有些人用的。
我看了一下,你标题的例子 var a=function(){}();
中函数定义就变成函数表达式
这里有一个类似的问题,可以参考一下
http://segmentfault.com/q/1010000003028413
@fighterleslie 的解释是,当函数定义放在赋值运算符(=
)后面,这个函数定义就成了函数表达式,函数表达式就可以立即调用。
var a=+function(){}(); === var a=(function(){})();.
只能说“执行过程”相等
返回结果必然不相等
第一个a 返回NaN
第二个a 返回undefined
再就是
var a=function(){}();
和
var a=(function(){})();
理论上没区别
仅仅是多了个括号运算符
想刨根问底的话 就 看看 括号运算符相关吧 ~··
剩下的 其实 @solar 已经说的很明白了
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
所有不以
function
关键字开头的函数都是函数表达式(在一个有效的js语句中),函数表达式可以直接通过在函数后面添加()
来直接执行。声明式函数则不会执行。这句话以var开头定义了一个函数表达式,然后通过加
()
来立即执行了。同样的
这些都会直接执行。
这个不会执行是因为
;
这个是语句的分割符,后面的语句是以function
开头声明了一个匿名函数。然后直接添加的()
会被解析成为分组符,不会解析成函数调用。