Babel 中的函數呼叫重寫:了解逗號運算子
Babel 是一種流行的JavaScript 編譯器,可將ES6 程式碼轉換為舊瀏覽器的相容版本。當遇到來自導入模組的函數呼叫時,Babel 通常會在呼叫的開頭加上一個逗號運算子 (0,)。這種行為引發了對其目的的疑問。
具體來說,包含導入函數呼叫的輸入檔:
由Babel 編譯為:
Babel 的預設行為是在嚴格模式下編譯,因此是(0,)。在鬆散模式下,函數呼叫輸出為 _b.a(),不帶逗號運算子。
解釋逗號運算子
新增(0,) 確保匯入的函數使用全域物件作為其this 值進行調用,如果啟用了嚴格模式,則使用未定義的值。如果沒有逗號,則 _b.a() 將以 _b 為其 this 值呼叫。
逗號運算子將第一個表達式 (0) 計算為未定義並忽略其結果。然後它計算第二個表達式 (_b.a) 並將其指派給臨時變數 (tmp)。最後,它以全域物件作為 this 值來呼叫臨時變數(tmp())。
本質上,這種技術允許導入的函數在全域範圍內操作,而不影響呼叫上下文的 this 值。
結論
Babel 在導入函數調用中使用逗號運算符可確保函數被正確調用,無論調用上下文。該技術是透過丟棄第一個逗號表達式結果並以全域物件作為其值呼叫臨時變數來實現的。
以上是為什麼 Babel 在匯入的函數呼叫中加入逗號運算子 (0,)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!