Effective Javascript 阅读笔记(2)-了解分号插入的局限

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++
}

上面这段代码不会自动的解析添加分号,所以会解析出错,无法执行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值