CommonJS和ES6模块在循环加载处理上有哪些不同之处?

2026-04-06 20:050阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1456个文字,预计阅读时间需要6分钟。

CommonJS和ES6模块在循环加载处理上有哪些不同之处?

CommonJS 模块规范使用 `require` 语句导入模块,通过 `module.exports` 导出模块。导出的值是值的复制,模块导入的也是值的复制。也就是说,一旦输出这个值,模块内部的变更不会影响到导出的值。

CommonJS模块规范使用require语句导入模块,module.exports导出模块,输出的是值的拷贝,模块导入的也是输出值的拷贝,也就是说,一旦输出这个值,这个值在模块内部的变化是监听不到的。

ES6模块的规范是使用import语句导入模块,export语句导出模块,输出的是对值的引用。ES6模块的运行机制和CommonJS不一样,遇到模块加载命令import时不去执行这个模块,只会生成一个动态的只读引用,等真的需要用到这个值时,再到模块中取值,也就是说原始值变了,那输入值也会发生变化。

那CommonJS和ES6模块规范针对模块的循环加载处理机制有什么不同呢?

循环加载指的是a脚本的执行依赖b脚本,b脚本的执行依赖a脚本。

1. CommonJS模块的加载原理

CommonJS模块就是一个脚本文件,require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成该模块的一个说明对象。

{ id: '', //模块名,唯一 exports: { //模块输出的各个接口 ... }, loaded: true, //模块的脚本是否执行完毕 ... }

以后用到这个模块时,就会到对象的exports属性中取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存中取值。

阅读全文

本文共计1456个文字,预计阅读时间需要6分钟。

CommonJS和ES6模块在循环加载处理上有哪些不同之处?

CommonJS 模块规范使用 `require` 语句导入模块,通过 `module.exports` 导出模块。导出的值是值的复制,模块导入的也是值的复制。也就是说,一旦输出这个值,模块内部的变更不会影响到导出的值。

CommonJS模块规范使用require语句导入模块,module.exports导出模块,输出的是值的拷贝,模块导入的也是输出值的拷贝,也就是说,一旦输出这个值,这个值在模块内部的变化是监听不到的。

ES6模块的规范是使用import语句导入模块,export语句导出模块,输出的是对值的引用。ES6模块的运行机制和CommonJS不一样,遇到模块加载命令import时不去执行这个模块,只会生成一个动态的只读引用,等真的需要用到这个值时,再到模块中取值,也就是说原始值变了,那输入值也会发生变化。

那CommonJS和ES6模块规范针对模块的循环加载处理机制有什么不同呢?

循环加载指的是a脚本的执行依赖b脚本,b脚本的执行依赖a脚本。

1. CommonJS模块的加载原理

CommonJS模块就是一个脚本文件,require命令第一次加载该脚本时就会执行整个脚本,然后在内存中生成该模块的一个说明对象。

{ id: '', //模块名,唯一 exports: { //模块输出的各个接口 ... }, loaded: true, //模块的脚本是否执行完毕 ... }

以后用到这个模块时,就会到对象的exports属性中取值。即使再次执行require命令,也不会再次执行该模块,而是到缓存中取值。

阅读全文