ASI 自動分號插入


Posted by hoyi-23 on 2021-05-18

甚麼是 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

這些開頭容易出錯

  1. (、[、/、
  2. 大部分算數運算子
  3. 點運算子(.)
  4. 逗號(,)

這些語句容易受影響

空的陳述式
var 陳述式
表達陳述式
do-while
continue
break
return
throw

遇上這些出錯,加入分號也是解決辦法。


#ASI







Related Posts

Javascript - slice vs splice

Javascript - slice vs splice

filter 與 interceptor 說明

filter 與 interceptor 說明

人人都會的 Android Apk 反編譯

人人都會的 Android Apk 反編譯


Comments