为什么 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中文网其他相关文章!