Babel 对导入函数调用的封装
Babel 经常生成用逗号运算符 (0, fn)( (0, fn)( ...),而不是预期的 fn()。这个看似无端的逗号可能会令人费解。让我们深入研究一下 Babel 这样做的原因。
在 JavaScript 中,在没有显式指定 this 上下文的情况下调用函数默认为全局对象。但是,当函数被定义为导入模块的属性时,其 this 上下文会自动设置为模块对象。为了防止这种“词法绑定”并确保导入的函数始终在全局上下文中执行,Babel 引入了 (0, fn)(...) 语法。
逗号运算符计算其左侧的表达式 ( 0),同时丢弃其结果。这会产生 0,它本质上是一个占位符。此语法构造的目的是强制将函数调用作为函数应用程序执行,而不是作为导入模块对象上的方法调用。
本质上, (0, fn)(... ) 相当于:
0; // Ignore result var tmp = fn; tmp();
通过放置不必要的逗号,Babel 有效地拦截了函数调用,并在 this 上下文设置为全局对象的情况下执行它。这确保了函数可以访问全局变量和函数,而不会触发任何意外的词法绑定。
以上是为什么 Babel 使用逗号运算符 (0, fn)(...) 来调用导入函数?的详细内容。更多信息请关注PHP中文网其他相关文章!