JavaScript编程-可选的分号

来源:互联网 发布:软件模块间接口 编辑:程序博客网 时间:2024/05/17 07:56

偷一下懒,直接用了《JavaScript权威指南》的小标题——可选的分号。

最近要参与公司项目,看了代码规范,又看了《JavaScript权威指南》,里面都有提到JavaScript编程过程中分号处理的问题。众所周知,JavaScript是可以不用分号结尾的,现在许多shell语言也都有类似的实现,其实是在解释代码的时候补加了分号。

之前有写过文章来记录js中必须要用分号的地方,不用分号会导致报错,但没有说为什么。这边又遇到了比较好的解释,所以记录一下。

看一下书中的描述在JavaScript中,如果语句各自独占一行,通常可以省略语句之间的分号(程序结尾或右花括号“}”之前的分号也可以省略)

这边有个条件语句各自独占一行,如果一行包括两个语句,则必须用分号隔开了

//类似这样,可以不加分号a = 3b = 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解析器很懒,但是也有例外,可能这几个是他比较中意的小姑娘,所以见了她们就要勤勤快快的,breakcontinuereturn++--,也就是说,这几个和后面(前面)的表达式之间不能换行,否则会被解释成两个语句。比如:

returntrue

会被解释成

return;true

或者

x++y

会被解释成

x;++y;

所以不用分号的时候要注意呀