通常情况下,解释器会自动添加分号,但有些时候不加分号还是容易引起解析错误,特别是在代码压缩的情况下,所以出于严谨考虑,还是推荐在语句结束时添加分号。还有不要把分号单单认为只是用来结束某段代码,它还可以用来隔离某段代码和别人划清界限。
如果遇到无法解析下去则javascript解析器会尝试给其添加一个分号,如果还是解析不了则报错。javascript解析器会尽可能多的去匹配,但也有几个例外,它们是retrun、break、continue,当javascript解析器解析到这几个关键字时,它不会把换行后的内容当成是自身的,而是直接在换行之前添加分号。
JavaScript自动加分号规则,有3条:
当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹配时,会自动补分号。
当有}
时,如果缺少分号,会补分号。
当程序源代码结束时,如果缺少分号,会补分号。
真正会导致上下行解析出问题的 token 有5个:括号,方括号,正则开头的斜杠,加号,减号。实际代码中几乎没有用正则、加号、减号作为行首的情况,所以一行开头是括号或者方括号的时候加上分号就可以了,其它时候全部不需要。
在return、break、continue、后自增、后自减五种语句中,换行符可以完全替代分号的作用。
var if do while for continue break return with switch throw try debugger几种关键字开头的语句,以及空语句,上一行加不加分号影响不大。
凡表达式语句和函数表达式语句,后面不加分号非常危险,情况极其复杂。
凡(
和[
开头的语句,前面不加分号极度危险。
```
// 例子1
var a = 10;
var b = 5;
var c = a + b
(a + b).toString() // b is not a function,同 var c = a + b(a + b).toString();
// 例子2
function test(){
return
123;
}
console.log(test()); // undefined,同 return;
```