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中也仍是會報錯
相關文章
相關標籤/搜索