ASI(Auto semicolon Insertion)
如同字面上的意思,『自動分號插入』,當語句結尾沒有加上分號時,JavaScript 會自動幫你插入分號,但不是每一行不加上分號它都願意幫你加,它是有它的原則的。
function callMing() {
return
'叫我小明'
}console.log(callMing()); // undefined
而上述的程式碼之所以沒有辦法正常運作就是受到這個機制影響,它看你都沒加分號,就會好心幫你加,就變成這樣
function callMing() {
return;
'叫我小明';
}console.log(callMing()); // undefined
想當然什麼都沒 return 回去了!
不會發生『ASI』的狀況
- 新的一行是 `(`、`[`、`/` 開始 (容易出錯的地方)
- 新的一行以 `+`、`-`、`*`、`%` 作開始 (會影響執行結果)
- 新的一行以 `,`、`.` 作開始 (需注意執行結果)
因此,遇到以上的標點符號前方加入分號也是解決辦法
例如
D// 執行錯誤
(function() { })()
(function() { })()
// 正確
;(function() { })()
;(function() { })()