偷一下懒,直接用了《JavaScript权威指南》的小标题——可选的分号。
最近要参与公司项目,看了代码规范,又看了《JavaScript权威指南》,里面都有提到JavaScript编程过程中分号处理的问题。众所周知,JavaScript是可以不用分号结尾的,现在许多shell语言也都有类似的实现,其实是在解释代码的时候补加了分号。
之前有写过文章来记录js中必须要用分号的地方,不用分号会导致报错,但没有说为什么。这边又遇到了比较好的解释,所以记录一下。
看一下书中的描述在JavaScript中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)
。
这边有个条件语句各自独占一行
,如果一行包括两个语句,则必须用分号隔开了
//类似这样,可以不加分号
a = 3
b = 4
//类似这样,必须有分号隔断
a = 3; b = 4
因为JavaScript解释时是在一行结束的时候才会判断是否需要补充分号,想来也是,如果每个字符的后面都要判断,那JavaScript也不用run了,运行时间会慢的让你抓狂。
现在我们知道JavaScript是在换行处补充分号的,但是,用书中的话来说并不是在所有换行处都补填分号:只有在缺少了分号就无法正常解析代码的时候,JavaScript才会填补分号
,这条规则比较有意思,也就是说,JavaScript解析器很懒,能不补就不补,比如说:
var y = x + f
(a + b).toString()
作者写这段代码的意思可能是这样的:
var y = x + f;
(a + b).toString();
但是会被解释成这样:
var y = x + f(a + b).toString
JavaScript解析器很懒,但是也有例外,可能这几个是他比较中意的小姑娘,所以见了她们就要勤勤快快的,break
、continue
、return
、++
、--
,也就是说,这几个和后面(前面)的表达式之间不能换行,否则会被解释成两个语句。比如:
return
true
会被解释成
return;true
或者
x
++
y
会被解释成
x;++y;
所以不用分号的时候要注意呀