ES6模块和CommonJS的区别

  • ES6模块是编译时加载,CommonJS是运行时加载。
  • ES6模块导入的是值的引用,并且是只读的,无法修改。CommonJS导入的是值的拷贝,可以修改。

优点:

  1. 由于ES6模块编译时就完成模块加载,效率要比CommonJS模块的加载方式高
  2. 由于ES6模块是编译时加载,使得静态分析成为可能。能进一步拓宽 JavaScript 的语法,比如引入宏(macro)和类型检验(type system)这些只能靠静态分析实现的功能。

CommonJS

	// 导出 test.js
	let count = 1
	let add = () => {
		count++
		console.log(count)
	}
	module.exports = {
		count,
		add
	}
	// 导入
	const obj = require('./test.js')
	console.log(obj.count)		// 1
	obj.add()					// 2
	console.log(obj.count)		// 1  输出的是值的拷贝,也就是说,一旦输出一个值,模块内部的变化不会影响到这个值,所以这里的count的值还是1
	obj.add()					// 3
	console.log(obj.count) 		// 1
	obj.count = 100				// 不会报错
	obj.add()					// 4
	console.log(obj.count)		// 100

ES6模块

	// 导出 test.js
	export let count = 1
	export let add = () => {
		count++
		console.log(count)
	}
	// 导入
	import * as obj from './e.js'
	console.log(obj.count)		// 1
	obj.add()					// 2
	console.log(obj.count)		// 2
	obj.add()					// 3
	console.log(obj.count)		// 3
	obj.count = 100				// 报错,ES6模块导入的是值的引用,并且是只读的,无法修改

你可能感兴趣的:(js基础,javascript)