Babel 中的函数调用重写:了解逗号运算符
Babel 是一种流行的 JavaScript 编译器,可将 ES6 代码转换为旧浏览器的兼容版本。当遇到来自导入模块的函数调用时,Babel 通常会在调用的开头添加一个逗号运算符 (0,)。这种行为引发了对其目的的疑问。
具体来说,包含导入函数调用的输入文件:
import { a } from 'b'; function x () { a() }
由 Babel 编译为:
'use strict'; var _b = require('b'); function x() { (0, _b.a)(); }
Babel 的默认行为是在严格模式下编译,因此是 (0,)。在松散模式下,函数调用输出为 _b.a(),不带逗号运算符。
解释逗号运算符
添加 (0,) 确保导入的函数使用全局对象作为其 this 值进行调用,如果启用了严格模式,则使用未定义的值。如果没有逗号,则 _b.a() 将以 _b 作为其 this 值来调用。
逗号运算符将第一个表达式 (0) 计算为未定义并忽略其结果。然后它计算第二个表达式 (_b.a) 并将其分配给临时变量 (tmp)。最后,它以全局对象作为 this 值来调用临时变量(tmp())。
本质上,这种技术允许导入的函数在全局范围内操作,而不影响调用上下文的 this 值。
结论
Babel 在导入函数调用中使用逗号运算符可确保函数被正确调用,无论调用上下文。该技术是通过丢弃第一个逗号表达式结果并以全局对象作为其值调用临时变量来实现的。
以上是为什么 Babel 在导入的函数调用中添加逗号运算符 (0,)?的详细内容。更多信息请关注PHP中文网其他相关文章!