在之前的工作中,我遇到了一个奇怪的问题。明明在语法上没有问题,找同事也看了,但是程序依旧会产生奇怪的错误。最后通过一步一步断点,定为了错误位置,才找到了造成这个错误的原因———在一个不需要分号的语言中,句末不加分号居然报错了。

不卖关子了,这个错误是多返回值函数造成了对上一句值的影响。下面举个例子:

1
2
3
4
5
6
7
8
9
10
function func() {
return [1, 2]
}

let b = 0
let c = 0
let a = 3
[b, c] = func();
console.log("a is :" + a)
console.log("b is :" + b + " c is :" + c)

运行的结果将会是这样:

a is :1,2
b is :0 c is :0

很容易看到,我们函数的返回值给了上一行的a。这是因为我们的编译器将代码认为了:

1
let a = 3 ,[b, c] = func();

避免这种情况,还是要多加分号吧——虽然它并不会报错。