JS一个立即执行函数表达式的疑问
// 如果你不在乎返回值,可以这么做
!function(){ /* code */ }();
~function(){ /* code */ }();
-function(){ /* code */ }();
+function(){ /* code */ }();
学习的时候,看了本站和一些第三方技术站的帖子,他们有的在文章中写到上面的代码。
我知道很多匿名都是以()
来执行调用的。但为什么他们说如果不在乎返回值
可以用!
+
~
这些符号。我不理解他们说的返回值是什么?
我第一反应是这样 !function(a) {alert(a)}(1000);
但在结果返回的是1000. 如果按照他们说的,不应该返回的是布尔值吗?为何是1000
所以到这里有些不太理解了。还请各位指定迷津。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
第一个问题,关于函数返回值:
第二个问题:
返回值和打印的结果不是一回事!
如果想看到被
!
作用后的结果,可以改写成这样!function(a) {alert(a)}(1000);
如同
function test(a){
alert(a);
}
test(1000)
只是不需要定义test函数
!function(a) {alert(a)}(1000)
函数运行的时候,会先运行到alter(a=1000),然后这个函数返回的是undefined(因为这个函数没有return任何东西),再!一下,就变成了true。
function前使用~ ! - +的目的是为了消除函数声明和函数表达式间歧义。
也就是说 function(){ /* code */ } 这是一个函数声明,如果直接在函数声明后使用 "()" 来调用, js 解析器无法解析,会提示:SyntaxError: unexpected_token 错误。
详细说明可以参考这篇文章:http://swordair.com/function-and-exclamation-mark/