JS ASI 自動插入分號

ASI 全名為 「Automatic Semicolon Insertion」,中文名稱為「自動分號插入」。

以下例子為例,如在結尾沒加上分號會自行插入

function hi() {
return;
("Hi");
}
console.log(hi()); // undefined

導致程式碼變成以下

function hi() {
return;
("Hi");
}
console.log(hi()); // undefined

還有常見犯錯例子,也就是立即函式

(function () {
console.log("hello");
})()(function () {
console.log("world");
})();

如下圖

解決方法如下,結尾或開頭加上分號

// plan A
(function () {
console.log("hello");
})();
(function () {
console.log("world");
})()(
// plan B
function () {
console.log("hello");
}
)();

(function () {
console.log("world");
})();

不會發生 ASI 的規則如下,可在頭或尾加上’;’解決:

  1. 新的一行是 ([/ 開始 (容易出錯的地方)
  2. 新的一行以 +-*% 作開始 (會影響執行結果)
  3. 新的一行以 ,. 作開始 (需注意執行結果)

一開始會想說誰不會在結尾加上分號,根本自找麻煩,結果ESLint的其中一個風格 Standard 就是提倡不在結尾處加上分號