扫码关注官方订阅号
我知道 var a=+function(){}(); === var a=(function(){})();
var a=+function(){}();
var a=(function(){})();
but var a=function(){}(); 是个什么鬼。也是iife的一种吗?很少用这种方式,但也有些人用的。
var a=function(){}();
ringa_lee
所有不以function关键字开头的函数都是函数表达式(在一个有效的js语句中),函数表达式可以直接通过在函数后面添加()来直接执行。声明式函数则不会执行。
function
()
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 已经说的很明白了
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
扫描下载App
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
所有不以
function
关键字开头的函数都是函数表达式(在一个有效的js语句中),函数表达式可以直接通过在函数后面添加()
来直接执行。声明式函数则不会执行。这句话以var开头定义了一个函数表达式,然后通过加
()
来立即执行了。同样的
这些都会直接执行。
这个不会执行是因为
;
这个是语句的分割符,后面的语句是以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 已经说的很明白了