扫码关注官方订阅号
84669人学习
65727人学习
82984人学习
467778人学习
498837人学习
471966人学习
256484人学习
152542人学习
224170人学习
139536人学习
81804人学习
85022人学习
11944人学习
20001人学习
60816人学习
5487人学习
15007人学习
2150人学习
6980人学习
194925人学习
359900人学习
1142人学习
19058人学习
3206人学习
180550人学习
48569人学习
17603人学习
40936人学习
1049人学习
750人学习
32909人学习
我知道 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-2024 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号
精品班
技术支持
技术咨询
学习群
会员优惠
返回顶部
所有不以
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 已经说的很明白了