ESM 循环依赖:为什么 import 进来的是 undefined
把一个大文件拆成两个模块,结果页面白屏,控制台只留下一句:
1ReferenceError: Cannot access 'a' before initialization或者更隐蔽一点:不报错,但 import 进来的值是 undefined,函数一调用就崩。循环依赖不是“打包工具的小毛病”,而是 ES Module 的求值顺序和绑定机制共同作用的结果。理解它,比记住“不要循环依赖”更有用。
[ CATEGORY ]
js 分类下共有 2 篇编程实战文章,涵盖常见问题排查、代码示例与实践经验。
把一个大文件拆成两个模块,结果页面白屏,控制台只留下一句:
1ReferenceError: Cannot access 'a' before initialization或者更隐蔽一点:不报错,但 import 进来的值是 undefined,函数一调用就崩。循环依赖不是“打包工具的小毛病”,而是 ES Module 的求值顺序和绑定机制共同作用的结果。理解它,比记住“不要循环依赖”更有用。
structuredClone 已经是现代浏览器和 Node.js 17+ 的全局函数。很多人把它当成 JSON.parse(JSON.stringify(obj)) 的替代品,甚至当成通用的深拷贝。大多数时候它确实更好用,但它的本质是“结构化克隆算法”:目标是把数据从一个执行环境搬到另一个执行环境,而不是把 JavaScript 对象原样复印一份。
理解这一点,很多看起来奇怪的行为就说得通了。
1class User {