JS中缺少分号可能引发的问题

以 “(”、“[”、“/”、“+”、或 “-” 开始的语句,那么它极有可能和前一条语句合在一起解释。

立即执行函数表达式

(function(){alert("1")})()// 可以正常执行
(function(){alert("2")})()// TypeError
复制代码
// 均可正常执行
(function(){alert("1")})();
(function(){alert("2")})()
复制代码

还是立即执行函数表达式

// 希望声明obj后,能够输出到控制台,但是会TypeError
var obj = {
	a:1
}(function(){
	console.log(obj)
})()
复制代码
var obj = {
	a:1
};(function(){
	console.log(obj)
})()//{a: 1}
复制代码

原因

  • 因为JS的自动分号插入机制而隐藏的问题。
  • (开头的立即执行函数表达式,它的(funtion()与上一句进行了解析。剩下的就只有{console.log(obj)})()了。
  • ()是执行函数,由于{console.log(obj)})并不是一个函数,所以会出现TypeError。

如何避免

  • 每句代码后面加分号表示已经结束
  • 即使日常coding不会有这种写法,但是在压缩JS的时候,还是很大可能被压缩成这样,并且在当前的Chrome中也还是会报错

转载于:https://juejin.im/post/5c2c713ef265da615d72c151

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值