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

js下面的区别,一个可以执行,一个不行

js下面的区别,一个可以执行,一个不行

小怪兽爱吃肉 2019-04-16 16:58:35
functionjam(){console.log("ok");}()jamlee2015/2/1422:49:11(functionjam(){console.log("ok");}())
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

实际上,第一种写法会抛出SyntaxError。
functionjam(){
console.log("ok");
}()
在JavaScript代码解析的时候,如果碰到function开头的语句,默认为认为这是一个函数声明。所以在编译器看来,上述的代码就是:
functionjam(){
console.log("ok");
}
()
也就是说,在编译器看来,这个语句做了两件事情:
声明了一个jam()函数
使用()运算符
声明函数是合法的,但是使用()运算符时出错了。在JavaScript中,()使用有两种场景,一种是作为函数调用符,一种是分隔表达式(提高优先级)。而上面这个代码中,无论哪个场景都不符合,所以抛出了一个语法错误。
第二段代码是立即执行的匿名函数表达式(IIFE)。
更详细的可以参考这篇文章:[译]立即执行函数表达式(IIFE)
                            
查看完整回答
反对 回复 2019-04-16
  • 2 回答
  • 0 关注
  • 285 浏览
慕课专栏
更多

添加回答

举报

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