我有一个名为的模块fooModule
。在此模块内,我fooModule
(本身)导入:
import * as fooModule from './fooModule';
export function logFoo() {
console.log(fooModule)
}
当logFoo()
被调用时,我可以看到fooModule的所有导出。这是如何运作的?
对于声明性导入/导出,循环依赖关系没有问题。在您的情况下,圆是最小长度的:-)
解决方案是import
不会将值导入变量,而是将变量作为对导出变量的引用。看看这里的一个可变变量的一个例子,在这个问题的确切的术语。
模块名称空间对象也是如此-它们的属性只是解析为实际导出变量的getter。
因此,在加载和评估模块时,将发生以下步骤:
export
并import
声明以构建依赖关系图fooModule
模块的导出名称(已知为)创建变量并将其实例化为对象["logFoo"]
。该fooModule.logFoo
属性将成为一个获取器,它将对logFoo
模块范围内的变量求值(如果使用export {A as B}
,fooModule.B
则将解析为A
,但是在您的情况下,两个名称相同)。logFoo
,模块作用域中的变量声明创建变量,并且函数声明被初始化(即,logFoo
被分配了函数)现在,当您调用logFoo
导入的模块时,fooModule
将引用包含的名称空间logFoo
。没有魔法:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句