JS中缺少分號可能引發的問題

binbin愛學習發表於2019-01-02

以 “(”、“[”、“/”、“+”、或 “-” 開始的語句,那麼它極有可能和前一條語句合在一起解釋。

立即執行函式表示式

(function(){alert("1")})()// 可以正常執行
(function(){alert("2")})()// TypeError
複製程式碼
// 均可正常執行
(function(){alert("1")})();
(function(){alert("2")})()
複製程式碼

JS中缺少分號可能引發的問題

還是立即執行函式表示式

// 希望宣告obj後,能夠輸出到控制檯,但是會TypeError
var obj = {
	a:1
}(function(){
	console.log(obj)
})()
複製程式碼
var obj = {
	a:1
};(function(){
	console.log(obj)
})()//{a: 1}
複製程式碼

JS中缺少分號可能引發的問題

原因

  • 因為JS的自動分號插入機制而隱藏的問題。
  • (開頭的立即執行函式表示式,它的(funtion()與上一句進行了解析。剩下的就只有{console.log(obj)})()了。
  • ()是執行函式,由於{console.log(obj)})並不是一個函式,所以會出現TypeError。

如何避免

  • 每句程式碼後面加分號表示已經結束
  • 即使日常coding不會有這種寫法,但是在壓縮JS的時候,還是很大可能被壓縮成這樣,並且在當前的Chrome中也還是會報錯

相關文章