前端筆記-JavaScript-ASI

Gene
Jul 2, 2021

--

我就懶得加分號,怎麼辦?

前言

function callMing() {
return
'叫我小明'
}
console.log(callMing()); // undefined

這段程式碼我們放到 console 上,沒辦法正常顯示叫我小明,但當我們把程式碼擺在同一行時

function callMing() {
return '叫我小明'
}
console.log(callMing()); // 叫我小明

這樣就正常了!到底為什麼呢?

ASI(Auto semicolon Insertion)

資料來源-六角學院

如同字面上的意思,『自動分號插入』,當語句結尾沒有加上分號時,JavaScript 會自動幫你插入分號,但不是每一行不加上分號它都願意幫你加,它是有它的原則的。

function callMing() {
return
'叫我小明'
}
console.log(callMing()); // undefined

而上述的程式碼之所以沒有辦法正常運作就是受到這個機制影響,它看你都沒加分號,就會好心幫你加,就變成這樣

function callMing() {
return;
'叫我小明';
}
console.log(callMing()); // undefined

想當然什麼都沒 return 回去了!

不會發生『ASI』的狀況

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

因此,遇到以上的標點符號前方加入分號也是解決辦法

例如

D// 執行錯誤
(function() { })()
(function() { })()
// 正確
;(function() { })()
;(function() { })()

--

--

Gene
Gene

Written by Gene

— Do or Do Not. There is no Try!

No responses yet