我知道 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 已经说的很明白了
1 回答858 阅读✓ 已解决
1 回答1.1k 阅读
2 回答774 阅读
2 回答622 阅读
2 回答609 阅读
1 回答682 阅读
2 回答529 阅读
所有不以
function关键字开头的函数都是函数表达式(在一个有效的js语句中),函数表达式可以直接通过在函数后面添加()来直接执行。声明式函数则不会执行。这句话以var开头定义了一个函数表达式,然后通过加
()来立即执行了。同样的
这些都会直接执行。
这个不会执行是因为
;这个是语句的分割符,后面的语句是以function开头声明了一个匿名函数。然后直接添加的()会被解析成为分组符,不会解析成函数调用。