Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当commonjs模块和es6模块之间存在循环依赖时,为什么会发生引用错误?_Javascript_Ecmascript 6_Commonjs_Es6 Modules - Fatal编程技术网

Javascript 当commonjs模块和es6模块之间存在循环依赖时,为什么会发生引用错误?

Javascript 当commonjs模块和es6模块之间存在循环依赖时,为什么会发生引用错误?,javascript,ecmascript-6,commonjs,es6-modules,Javascript,Ecmascript 6,Commonjs,Es6 Modules,我正在读这篇文章,它举例说明了两种情况: 案例1: A: B 案例2: A: B: 对于案例1,它说 解析“A”的代码并创建模块记录时,会检测到“B”不是ESM,因此验证日志是否由“B”导出的验证步骤将挂起 对于案例2,它说 这种类型的循环在很大程度上不可能实现,因为当ESM“B”被链接和评估时,符号“a”尚未由CommonJS模块“a”定义和导出。这种情况很可能被视为参考错误 所以我的问题是:为什么在案例1中“验证步骤”将挂起,而不是案例2??对我来说,这两个都是引用commonjs模块中

我正在读这篇文章,它举例说明了两种情况:

案例1:

A:

B

案例2:

A:

B:

对于案例1,它说

解析“A”的代码并创建模块记录时,会检测到“B”不是ESM,因此验证日志是否由“B”导出的验证步骤将挂起

对于案例2,它说

这种类型的循环在很大程度上不可能实现,因为当ESM“B”被链接和评估时,符号“a”尚未由CommonJS模块“a”定义和导出。这种情况很可能被视为参考错误

所以我的问题是:为什么在案例1中“验证步骤”将挂起,而不是案例2??对我来说,这两个都是引用commonjs模块中命名导出的ES模块,为什么case1可以放入挂起,而case2将抛出referenceerror

import {log} from "B"
export default function() {
  log('hello world')
}
module.exports.log = function(msg) {
  console.log(msg);
}
const b = require('B')
exports.b = b.foo()
exports.a = 1
import {a} from "A"
export const foo () => a