理解 Babel 在函数调用中神秘的逗号运算符
在 Babel 的编译过程中,用户观察到导入的函数调用发生了逗号的转换(,) 插入函数名称之前。这种行为引发了有关此更改背后的目的和基本原理的疑问。
在检查输入和输出代码示例时,很明显 Babel 的严格模式编译会产生以下语法:
(0, _b.a)();
然而,在松散模式下,这种转换不存在,只留下常规函数调用:
_b.a();
神秘之处在于逗号运算符的插入。为了解开这个谜团,我们需要深入研究负责这种转换的代码。
经过调查,我们发现 Babel 使用逗号运算符来确保导入的函数在全局对象的上下文中调用,或者如果启用严格模式,则未定义。这是通过以下 JavaScript 代码实现的:
0; // Ignore result var tmp = _b.a; tmp();
本质上,逗号运算符创建一个临时变量 (tmp),用于保存对导入函数 (_b.a) 的引用。通过调用 tmp() 而不是 _b.a(),Babel 确保在正确的执行上下文中调用该函数。
换句话说,“(0, _b.a)() 相当于调用_b.a 将此设置为未定义(或非严格模式下的全局对象),这可以防止将 this 意外绑定到 _b,这可能会导致意外行为。
以上是为什么 Babel 在严格模式下的导入函数调用前插入逗号运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!