function add(x,y){
this.x=x||0
this.y=y||0
}
在JavaScript,我们写让上面的代码,省略分号的使用,此段代码依旧会正常执行。这样就使得代码变得更加轻量而优雅。这段代码之所以可以正常执行,主要是依赖于JavaScript的自动分号插入技术。它是一种解析技术,能够推断出上下文省略的分号,然后有效的自动将分号‘插入’到程序中。但是分号插入也有陷阱,所以就需要学习分号插入的规则。
1、仅在“}”标记之前,一行的结束之后以及程序结束处推导分号
这段函数的定义是合法的
function add(x,y){
var n=x+y
return n*n
}
function add1(r){return r+1}
function add2(x){x=+x;return x}
这段函数的定义是不合法的
function add2(x){x=+x return x}
2、仅在紧接着的标记不能被解析的时候推导分号(分号插入也是一种错误矫正机制)
这段函数的定义是合法的
a=b
f()
这段函数的定义是不合法的
a=b
(f())
上面两段代码会分别被解析成
a=b f() //会被解析成两个独立的语句
a=b(f()) //会被解析成一条独立的语句
3、在以(、[、+、-或者以/字符开头的语句前绝不能省略分号
情况一
这段函数的定义是合法的
a=b
["d","s","a"].forEach(function(key){
background[key]=forground[key]/2;
})
这段代码看起来像是两条语句,但由于已 “[” 开头,所以被解析成一条语句
a=b["d","s","a"].forEach(function(key){
background[key]=forground[key]/2;
})
情况二
a=b
var x
(f())
修改为
a=b
var x
;(f())
4、当脚本链接的时候,在脚本之间显示的插入分号
省略分号可能会导致脚本链接问题
(function(){
//.........
})()
(function(){
//.........
})()
(function(){
//.........
})()
会被视为单独一条语句
(function(){
//.........
})()(function(){
//.........
})()(function(){
//.........
})()
修改为
;(function(){
//.........
})()
;(function(){
//.........
})()
;(function(){
//.........
})()
5、在return、throw、break、continue、++或--的参数之前绝不能换行
return
{ };
这段代码会被解析成三条独立的语句,等价于
return;
{ }
;
6、分号不能作为for循环的头部或空语句的分隔符而被推导出
for(var i=0,total=1
i<n
i++){
total++
}
上面这段代码不会自动的解析添加分号,所以会解析出错,无法执行