JS 核心篇 (10) ASI 自動插入分號

ASI 機制說明

1
2
3
4
5
function callName() {
return
'小名'
}
console.log(callName()); // undefined

上面這段程式會回傳 undefined,因為受到 ASI 自動插入分號機制影響。

ASI 自動插入分號機制說明:

js 的每段語句都應該加入分號結尾,若沒加入分號,則會受到ASI 自動插入分號機制影響。以上面程式為例,實際上運作是長這樣:

1
2
3
4
function callName() {
return; '小名';
}
console.log(callName()); // undefined

因為 return 後方沒有分號,js 就自動補上分號,導致結果是 undefined。

再看一個例子:

1
2
3
if (1 > 10) a = 1
else a = 2
console.log(a) // 2

上面語句受到 asi 機制影響,在句尾都自動補上分號。

不會發生 ASI 的規則

  1. 新的一行是 ([/ 開始 (容易出錯的地方)
1
2
3
4
5
6
7
8
var a = 1
var b = a
(a + b).toString()
(function() { })()
(function() { })()
var a = 1
var b = a
/test/.test(b)
  1. 新的一行以 +-*% 作開始 (會影響執行結果)
1
2
3
var a = 2
var b = a
+a
  1. 新的一行以 ,. 作開始 (需注意執行結果)
1
2
3
4
5
6
var a = 2
var b = a
.toString()
console.log(typeof b)
var a = 1
,b = 2 // b 一樣會 var 被宣告

4.