Mr.*_*ice 8 javascript ecmascript-6 webpack es6-module-loader
我有一个名为的模块fooModule.在这个模块中,我导入fooModule(本身):
import * as fooModule from './fooModule';
export function logFoo() {
console.log(fooModule)
}
Run Code Online (Sandbox Code Playgroud)
当logFoo()被调用时,我可以看到所有的fooModule的出口.这是如何运作的?
Ber*_*rgi 10
循环依赖对于声明性导入/导出没有问题.在你的情况下,圆圈长度最小但是:-)
解决方案是,a import不会将值导入变量,而是使变量成为对导出变量的引用.看看这里有一个可变变量的例子,并在这个问题上找到确切的术语.
对于模块命名空间对象也是如此 - 它们的属性只是解析为实际导出变量的getter.
因此,在加载和评估模块时,会发生以下步骤:
export并import声明构建依赖图fooModule被创建的变量和实例化与所述模块的出口名称,这是众所周知的是一个对象["logFoo"].该fooModule.logFoo属性成为一个getter,将评估logFoo模块范围中的变量(如果您已经使用过export {A as B},那么fooModule.B将解析为A,但在您的情况下,两个名称都是相同的).logFoo,函数声明被初始化(即被logFoo赋予函数)现在,当您调用logFoo导入它的模块时,fooModule将引用包含的命名空间logFoo.没有魔法:-)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |