var a=function(){}();

我知道 var a=+function(){}(); === var a=(function(){})();

but var a=function(){}(); 是个什么鬼。也是iife的一种吗?很少用这种方式,但也有些人用的。

阅读 3.9k
4 个回答

所有不以function关键字开头的函数都是函数表达式(在一个有效的js语句中),函数表达式可以直接通过在函数后面添加()来直接执行。声明式函数则不会执行。

var a = function(){}();

这句话以var开头定义了一个函数表达式,然后通过加()来立即执行了。
同样的

+function(){}();
~function(){}();
-function(){}();
*function(){}();
...

这些都会直接执行。

;function(){}();

这个不会执行是因为;这个是语句的分割符,后面的语句是以function开头声明了一个匿名函数。然后直接添加的()会被解析成为分组符,不会解析成函数调用。

是的,前面加运算符号都可以让匿名函数可以运算

我看了一下,你标题的例子 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 已经说的很明白了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题