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中也仍是会报错
相关文章
相关标签/搜索