為什麼 Babel 在嚴格模式下重寫導入函數呼叫
在嚴格模式下,當 Babel當遇到導入函數呼叫時,它會重寫它以包含逗號運算符,如下例所示:
import { a } from 'b'; function x () { a() }
編譯後的嚴格模式下的輸出變為:
'use strict'; var _b = require('b'); function x() { (0, _b.a)(); }
此轉換可確保呼叫匯入的函數並將其設為全域物件(如果啟用了嚴格模式,則設為未定義)。如果沒有逗號運算符,導入的函數將在其模組中設定此集合來呼叫。
逗號運算子的說明
逗號運算子 (,) 用於JavaScript 計算多個表達式,以逗號分隔。它傳回最後一個表達式的值。在重寫的程式碼中,逗號運算子的使用如下:
(0, _b.a)();
這相當於以下程式碼:
0; // Ignore result var tmp = _b.a; tmp();
第一個表達式 0 被忽略。第二個表達式 _b.a 將匯入的函數指派給 tmp 變數。第三個表達式 tmp() 呼叫導入函數,並將此設定為全域物件(或在嚴格模式下設為未定義)。
透過使用逗號運算符,Babel 確保始終使用以下命令呼叫匯入函數無論執行上下文如何,正確的 this 值。
以上是為什麼 Babel 在嚴格模式下呼叫導入函數時要新增逗號運算子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!