一、export语句的区别:

ES6 和 CommonJS 是两种不同的 JavaScript 模块化规范,它们的 export 语句有一些区别:

  1. export 关键字:在 ES6 中,使用 export 关键字来导出模块中的变量、函数、类等;而在 CommonJS 中,使用 module.exports 来导出模块。

  2. 导出方式:ES6 的 export 语句可以直接导出变量、函数、类等,如:

    // ES6
    export const name = 'Alice';
    export function greet() {console.log('Hello!');
    }// CommonJS
    module.exports = {name: 'Alice',greet: function() {console.log('Hello!');}
    };
    
  3. 多次导出:在 ES6 中,一个模块可以有多个 export 语句,而在 CommonJS 中,只能使用一次 module.exports 导出整个模块,不能分别导出多个变量或函数。

  4. 导入方式:在 ES6 中,使用 import 关键字导入其他模块的变量、函数、类等;而在 CommonJS 中,使用 require() 函数导入其他模块。

总的来说,ES6 的 export 语句提供了更加方便、灵活的导出方式,适合于浏览器端和 Node.js 中使用;而 CommonJS 的 module.exports 导出方式则更适合于 Node.js 文件模块中使用。

下面我会分别举例说明 ES6 和 CommonJS 的不同点。

  1. 语法不同:

ES6使用importexport关键字来实现模块化,示例如下:

// app.js
import { add } from './math.js';
console.log(add(1, 2));// math.js
export function add(x, y) {return x + y;
}

CommonJS使用require()module.exports实现模块化,示例如下:

// app.js
const math = require('./math.js');
console.log(math.add(1, 2));// math.js
module.exports = {add: function(x, y) {return x + y;}
};

2. 加载方式不同:

ES6是静态加载,编译时就处理了模块依赖关系,示例如下:

// app.js
import { add } from './math.js'
console.log(add(1, 2))// math.js
export function add(x, y) {return x + y
}

3. CommonJS是动态加载,运行时才处理模块依赖关系,示例如下:

// app.js
const math = require('./math.js')
console.log(math.add(1, 2))// math.js
module.exports = {add: function(x, y) {return x + y}
}

3.应用场景不同:

ES6适用于浏览器端和Node.js中使用,示例如下:

// app.js
import { add } from './math.js'
console.log(add(1, 2))// math.js
export function add(x, y) {return x + y
}

4. CommonJS适用于服务器端,示例如下:

// app.js
const math = require('./math.js')
console.log(math.add(1, 2))// math.js
module.exports = {add: function(x, y) {return x + y}
}

4.对象引用不同:

ES6的模块导入通过对象引用来实现,示例如下:

// utils.js
export let count = 0;export function increment() {count++;
}// app.js
import { count, increment } from './utils.js';console.log(count); // 0
increment();
console.log(count); // 1

CommonJS的模块导入则是通过值拷贝的方式来实现,示例如下:

// utils.js
var count = 0;function increment() {count++;
}module.exports = {count: count,increment: increment
};// app.js
var utils = require('./utils.js');console.log(utils.count); // 0
utils.increment();
console.log(utils.count); // 0

5. 循环依赖处理不同:

ES6在编译时会进行循环依赖处理,示例如下:

// a.js
import { b } from './b.js'export const a = 'a'console.log(a, b)// b.js
import { a } from './a.js'export const b = 'b'console.log(a, b)

CommonJS无法处理循环依赖,示例如下:

// a.js
exports.a = 'a';
const { b } = require('./b.js');
console.log(a, b);// b.js
exports.b = 'b';
const { a } = require('./a.js');
console.log(a, b);

以上是 ES6 和 CommonJS 的一些区别,不同点的具体表现形式还可能有其他的方式。在实际应用中,可以根据具体情况选择使用不同的模块化方案。

总结:

ES6 和 CommonJS 都是 JavaScript 模块化的规范,它们之间有以下区别:

  1. 语法不同:ES6 使用 importexport 关键字来实现模块化,而 CommonJS 使用 require()module.exports

  2. 加载方式不同:ES6 使用静态加载,即在编译时就处理模块依赖关系;而 CommonJS 使用动态加载,即在运行时处理模块依赖关系。

  3. 应用场景不同:ES6 的模块化适用于浏览器端和 Node.js 中使用,它采用了异步导入、编译时静态分析等技术,使得代码可读性更好,依赖关系更清晰,能够有效提高代码执行效率。而 CommonJS 则更适合于服务器端,因为 Node.js 中使用的大部分第三方模块都是基于 CommonJS 规范的。

  4. 对象引用不同:ES6 的模块导入是通过对象引用来实现的,即所有导入的变量都指向同一个引用;而 CommonJS 的模块导入则是通过值拷贝的方式来实现的,即每个变量都拷贝了一份导出变量的值。这意味着如果在 ES6 的模块中修改导出变量的属性,那么其他导入该变量的模块也会受到影响,而在 CommonJS 中则不会。

  5. 循环依赖处理不同:ES6 在编译时会进行循环依赖处理,即将模块中的循环依赖转换成静态的拓扑结构;而 CommonJS 则无法处理循环依赖。

总的来说,ES6的模块化规范更加先进、灵活,能够适应更多的应用场景,而CommonJS则更加简单、易用,广泛应用于Node.js开发中。在实际应用中,可以根据具体情况选择使用不同的模块化方案。

es6和commonJs的区别相关推荐

  1. JavaScript、ES5和ES6的介绍和区别

    JavaScript简介 JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能. JavaScript由三部分组成: ECMAScript(核心)+DOM ...

  2. ES6模块加载方案 CommonJS和AMD ES6和CommonJS

    目录 CommonJS CommonJS和AMD的对比 ES6和CommonJS 改成ES6 exports和module.exports CommonJS 每个文件就是一个模块,有自己的作用域.在一 ...

  3. android person类_es5 类与es6中class的区别小结_javascript技巧

    这篇文章主要给大家介绍了关于es5 类与es6中class区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 前言 在 ...

  4. es5和es6声明类的区别/es5和es6继承的区别

    // es5和es6声明类的区别,es5没有统一语法规范.es6有统一写法规范 start. // es5声明"类"的语法--伪类 // function Person(name, ...

  5. 对比ES6和CommonJS

    文章目录 前言 CommonJs 用法 导出 导入 动态导入 值的改变 Es Module 用法 导出 导入 值的改变 `export` 和 `export default` 的区别 CommonJs ...

  6. ESM(ESModule)和CJS(CommonJS)的区别

    壹(序) ES6之前,JS一直没有自己的模块体系,这一点对于大型项目的开发很不友好,所以社区出现了CommonJS和AMD(本人不熟悉),CommonJS主要是用于服务器(Node),AMD主要是用于 ...

  7. ES Module和CommonJS的区别

    ESM:import, import(), export, export default CommonJS: require(), module.exports 1. CommonJS输出的是值的拷贝 ...

  8. ES6模块化+CommonJS

    ES6 模块化简介 在ES6模块化规范诞生之前,JavaScript社区已经尝试提出了AMD.CMD.CommonJS等模块化规范. 但是,这些由社区提出的模块化标准,有一定的差异性和局限性,并不是浏 ...

  9. ES6与CommonJS的模块化加载

    两个差异 CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用. 什么是值的拷贝,值的引用? 所谓值的拷贝,是在栈内存当中实现的,是一个复制的过程,复制之后两个值互不影响 值的引用 ...

最新文章

  1. 16 美元,黑客就能截获你的短信?
  2. 禁止直接在浏览器输入网址访问的代码
  3. word操作快捷键记录
  4. 迭代器协议、斐波那契数列
  5. delphi控件切图界面闪烁_先本设计教你跳过UI小程序的七个坑
  6. 【NOIp2002】矩形覆盖
  7. Atitit 多语言互相调用总结mltlan invk现在我们开发项目往往会采用多种语言,各取所长 组合使用。。常常需要互相调用为什么会调用多种语言?1.开发效率与可读性 ,一种情况是实现同
  8. mysql 递归查询子类_MySQL递归查询当前节点及子节点
  9. eXeScope 提取.exe/.dll中的图片资源
  10. ef 数据迁移mysql_ef数据库迁移
  11. 多目标优化——帕累托最优Pareto
  12. c语言程序中u8是什么意思,c – __u8和uint8_t之间的区别
  13. 关于多对多关系(即E-R图中m:n)中的界面展示优化
  14. 强大数定理,弱大数定理,和中心极限定理
  15. 实现74HC85的功能以及16位数值比较器
  16. 2017GYL创业营暨青年大会全球招募中
  17. 今天下午2点|AI TIME “未来杯” 走进浙江大学
  18. 2022湖南科技大学 新生快乐赛 题解
  19. Java工程师的进阶之路
  20. Node.js monly图片批量下载爬虫1.00

热门文章

  1. CSDN 第 8 期题解(无 T1 代码)
  2. 妖狐显示连接备用服务器,《妖狐:缘起》关服公告
  3. 逆向wireshark学习SSL协议算法(转)
  4. 征信逾期严重 还能成功下卡吗?
  5. vue项目中常用的正则校验表达式
  6. 机器学习模型自我代码复现:GBDT
  7. 2022年全球市场螺旋牙种植体总体规模、主要生产商、主要地区、产品和应用细分研究报告
  8. 小N研究的NP完全问题
  9. Word转PDF出现空白页面
  10. 抑郁症会发展成精神分裂症?这些真相越早知道越好!