为了账号安全,请及时绑定邮箱和手机立即绑定

JS一个立即执行函数表达式的疑问

JS一个立即执行函数表达式的疑问

收到一只叮咚 2019-04-21 20:37:57
//如果你不在乎返回值,可以这么做!function(){/*code*/}();~function(){/*code*/}();-function(){/*code*/}();+function(){/*code*/}();学习的时候,看了本站和一些第三方技术站的帖子,他们有的在文章中写到上面的代码。我知道很多匿名都是以()来执行调用的。但为什么他们说如果不在乎返回值可以用!+~这些符号。我不理解他们说的返回值是什么?我第一反应是这样!function(a){alert(a)}(1000);但在结果返回的是1000.如果按照他们说的,不应该返回的是布尔值吗?为何是1000所以到这里有些不太理解了。还请各位指定迷津。
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

第一个问题,关于函数返回值:
(function(){
console.log('result')
})();
//result
//undefined
这个IIFE执行后,会log字符串result,但是因为这个函数没有定义返回值,所以会返回undefined
第二个问题:
!function(a){alert(a)}(1000);
上面的这个IIFE可以拆解为:
vartemp=function(a){
alert(a)
}
temp(1000);
因为你传入了1000,所以它会打印1000,但是因为这个函数依然没有返回值,所以会返回undefined
返回值和打印的结果不是一回事!
如果想看到被!作用后的结果,可以改写成这样
!function(a){
alert(a);
returna;
}(1000);
//alert==>1000
//return==>false
                            
查看完整回答
反对 回复 2019-04-21
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

!function(a){alert(a)}(1000);
如同functiontest(a){
alert(a);
}
test(1000)
只是不需要定义test函数
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 387 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信