甚麼是 ASI ?
有時候我們會看到JavaScript內,一下有";",一下沒有。這是因為有JavaScript特別的機制才能正常運作。
ASI (Automatic Semicolon Insertion)
當JavaScipt語句沒有加上分號時,則會受到自動插入分號(ASI)規則影響。
ASI 自動分號插入 - JavaScript 其實是允許不寫分號的,因為它會自動幫你插入。
ASI 錯誤時刻
1 return
var a = function(){
return
'Hi'
}
console.log(a()) //undefined
結果出現undefined,因為ASI的機制,實際執行時會長這樣:
var a = function(){
return; //結束了
'Hi';
}
console.log(a()); //undefined
2 立即函式
後面直接放上(),以馬上執行。
(function(){
console.log('hi')
})() //undefined
解決這個錯誤的方式有兩種,一種是在立即函式結尾補上分號或者是在立即函式前面補上分號
(function(){
console.log('hi')
})(); //hi
;(function(){
console.log('hi')
})() //hi
這些開頭容易出錯
- (、[、/、
- 大部分算數運算子
- 點運算子(.)
- 逗號(,)
這些語句容易受影響
空的陳述式
var 陳述式
表達陳述式
do-while
continue
break
return
throw
遇上這些出錯,加入分號也是解決辦法。