最近在学习JS的时候遇到这么一个问题。由于我之前的学习中一直是写一句JS代码,加一个分号。但是最近我才发现原来JS代码是可以不添加分号的。如果可以不写分号的话会不会更省事呢?于是我在网上查了相关资料整理了以下内容。
1.当有换行符(包括含有换行符的多行注释),并且下一个token没法跟前面的语法匹配时,会自动补分号;
2.当有 } 没有分号时,会补分号;
3.当程序源代码结束时,如果缺少分号,会补分号;
4.在return、break、continue、后自增、后自减语句中,换行可以完全替代分号的作用;
5.var、if、do、while、for、continue、break、return、with、switch、throw、try、debugger关键字开头的语句以及空语句,上一行加不加分号影响不大。
如果一条语句以 “(” 、“[”、"+" 、“-”开始或有表达式语句和函数表达式语句,那么它极有可能和前一条语句在一起进行解释,JS不会自动补分号。这时如果前面没有分号隔开的话会很麻烦。
下面我们来分别看看JS不会补加分号的这些情况下,代码是怎么样的。
(function(){ }()) a = 1; // JS解释上面语句: (function () { }())a = 1;
b = function() { } [1,2,3].forEach(function(i) { }); // JS解释上面语句: b = function() { }[1,2,3].forEach(function(i) { });
a = b + c // JS解释上面语句: a = b + c
a = b - c // JS解释上面语句: a = b - c
加与不加是个人习惯问题,但是如果遇到必须添加分号的情况,我们还是不能马虎大意。因此为了严谨起见个人建议还是每句写完以后加一个分号。