javascript - var a=function(){}();
ringa_lee
ringa_lee 2017-04-10 15:36:27
[JavaScript讨论组]

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

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

ringa_lee
ringa_lee

ringa_lee

全部回复(4)
PHP中文网

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

var a = function(){}();

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

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

这些都会直接执行。

;function(){}();

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

天蓬老师

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

PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号