為什麼 Babel 的編譯輸出有 (0, Babel Function Call) ?
從外部模組匯入函數並在程式碼中使用它們時,你可能會注意到 Babel 轉換後的輸出中有一個有趣的行為。函數以 (0, fn)(...) 的形式包裝。這與在鬆散模式下編譯時不帶逗號運算子的原始函數呼叫不同。
此轉換有特定目的:它確保函數的 this 上下文設定為全域物件在非嚴格模式下或在嚴格模式下未定義。當直接呼叫 _b.a() 時,this 將預設為 _b 模組物件。
透過使用 (0, _b.a)(),Babel 強制將 this 設定為適當的值來呼叫的函數。逗號運算子 (,) 本質上丟棄前面表達式的傳回值(在本例中為 0)併計算右側,即本實例中的函數呼叫。
本質上,轉換後的程式碼相當於:
0; // Ignore result var tmp = _b.a; tmp();
此技術保證函數的 this 上下文與預期一致行為。
以上是為什麼 Babel 在呼叫導入函數時使用 `(0, fn)(...)` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!