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

代码1:
var a = 'Aaa';
var b = 'Bbb';
[a, b] = [b, a];
console.log(a);
console.log(b);

结果:
Bbb
Aaa


代码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


qq_花开花谢_0
浏览 1196回答 5
5回答

青春有我

不强行要求分号不代表不写分号是正确的。解释器会自动加分号,不保证完全能按你的意思加分号也许就加错分号了,结果就错了。变成了var a = 'Aaa';var b = 'Bbb'[a, b] = [b, a];console.log(a);console.log(b);

德玛西亚99

其实代码和说话一样,加分号好比加上标点符号。你加了分号机器就按照你的意思来走,不加分号那机器就按照它的理解来走,举个例子:你说:下雨天留客天留我不留。那别人理解为:1、下雨天留客,天留我不留。2、下雨天留客,天留,我不留。3、下雨天留客,天留我?不留。4、下雨天留客,天留我不?留。5、下雨,天留客;天留我不留!6、下雨天,留客天,留我?不留。7、下雨天,留客天,留我不?留。8、下雨天,留客天,留我不留?代码也是一个意思,不同的结果只是因为有歧义,上面两个回答很好的说明了,我就不赘述了,?

茅侃侃

不强制要求,是在没有歧义的情况下。你的第二句和第三句有歧义,合并为一条语句也可以。再举个例子a = func(...)不加分号会合并成一行,变成了执行func函数,会导致运行时错误或逻辑错误。

慕标琳琳

var aaa = 'Aaa'var bbb = 'Bbb'var [aaa, bbb] = [bbb, aaa]console.log(aaa)console.log(bbb)不用分号也行
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript