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

为什么JS用分号结尾和没用分号结尾执行的结果不一致?

为什么JS用分号结尾和没用分号结尾执行的结果不一致?

qq_花开花谢_0 2019-03-13 18:14:51
代码1:var a = 'Aaa';var b = 'Bbb';[a, b] = [b, a];console.log(a);console.log(b);结果:BbbAaa代码2:var a = 'Aaa'var b = 'Bbb'[a, b] = [b, a]console.log(a);console.log(b);结果:Aaa[ undefined, 'Aaa' ]如果说JS并不强行要求每行语句末尾必须要用分号结尾的话,上面两段代码按道理来说结果不是应该一致的吗?测试环境:node v6.10.2
查看完整描述

5 回答

?
青春有我

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

不强行要求分号不代表不写分号是正确的。解释器会自动加分号,不保证完全能按你的意思加分号也许就加错分号了,结果就错了。变成了


var a = 'Aaa';

var b = 'Bbb'[a, b] = [b, a];

console.log(a);

console.log(b);


查看完整回答
反对 回复 2019-03-29
?
德玛西亚99

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

其实代码和说话一样,加分号好比加上标点符号。你加了分号机器就按照你的意思来走,不加分号那机器就按照它的理解来走,

举个例子:

你说:下雨天留客天留我不留。

那别人理解为:
1、下雨天留客,天留我不留。
2、下雨天留客,天留,我不留。
3、下雨天留客,天留我?不留。
4、下雨天留客,天留我不?留。
5、下雨,天留客;天留我不留!
6、下雨天,留客天,留我?不留。
7、下雨天,留客天,留我不?留。
8、下雨天,留客天,留我不留?

代码也是一个意思,不同的结果只是因为有歧义,上面两个回答很好的说明了,我就不赘述了,?


查看完整回答
反对 回复 2019-03-29
?
茅侃侃

TA贡献1842条经验 获得超22个赞

不强制要求,是在没有歧义的情况下。你的第二句和第三句有歧义,合并为一条语句也可以。


再举个例子


a = func

(...)

不加分号会合并成一行,变成了执行func函数,会导致运行时错误或逻辑错误。


查看完整回答
反对 回复 2019-03-29
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

var aaa = 'Aaa'

var bbb = 'Bbb'

var [aaa, bbb] = [bbb, aaa]

console.log(aaa)

console.log(bbb)

不用分号也行


查看完整回答
反对 回复 2019-03-29
  • 5 回答
  • 0 关注
  • 1195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号