js模块化,理解AMD,CommonJS和es6

本文介绍了三种模块化编程规范:CommonJS, AMD 和 ES6 模块。CommonJS 用于服务器端,采用同步加载,适用于本地模块;AMD(异步模块定义)为浏览器环境设计,如 RequireJS,支持异步加载;ES6 模块则是静态导出和导入,适用于现代浏览器和打包工具。文章通过示例展示了它们的使用方式和特性。
摘要由CSDN通过智能技术生成

1. CommonJS:

同步模块加载 ,Commonjs主要应用的环境是nodejs,也就是服务器端广泛使用的一种模块化机制,模块一般都存在于本地,所以不需要考虑网络加载因素,所以是 同步加载。CommonJS 模块语法不能在浏览器中直接运行。

CommonJS 模块定义需要使用 require()指定依赖,而使用 exports 对象定义自己的公共 API。每个模块都有自己独立的作用域,module变量代表当前模块。

模块是值的“浅”拷贝

// 输出模块 moduleA.js
var x = 1
 
function fun() {
    x++;
}
module.exports = {
    x: x,
    fun: fun,
};


// 引入模块 moduleA.js
var mod = require('./moduleA.js');
 
console.log(mod.x); // 1
mod.fun();
console.log(mod.x); // 1
// 输出模块 moduleA.js
var x = {
	value: 1
}
 
function fun() {
    x.value++;
}
module.exports = {
    x: x,
    fun: fun,
};


// 引入模块 moduleA.js
var mod = require('./moduleA.js');
 
console.log(mod.x.value); // 1
mod.fun();
console.log(mod.x.value); // 2

结论: value 是会发生改变的。说明这是 “值的拷贝”,只是对于引用类型而言,值指的其实是引用地址。

2. AMD:

异步模块定义 ,为浏览器环境设计,RequireJS即为遵循AMD规范的模块化工具,requireJS的基本思想是,通过define方法定义模块化,通过require加载模块。

AMD 模块实现的核心是用函数包装模块定义。这样可以防止声明全局变量,并允许加载器库控制何时加载模块

通过define方法定义模块,但是按照俩种情况进行书写。

1.该模块独立存在,不依赖其他模块(可以返回任何值):

define(function() {
	// to do
	return {
	// 返回的接口
	}
})

2.该模块依赖其他模块时():

define(['module1','module2'], function(module1, module2) {
	//to do
	return {
	// 返回的接口
	}
})

AMD要求在使用前需要先把所有的模块都写出来

3. ES6模块:

如果使用es6语法,那么则无需引入requireJS进行模块化,它的特点主要为:
ES6 模块默认在严格模式下执行。
 ES6 模块不共享全局命名空间。
 模块顶级 this 的值是 undefined(常规脚本中是 window)。
 模块中的 var 声明不会添加到 window 对象。
 ES6 模块是异步加载和执行的。

导出:

  • export 导出该模块要导出的变量、函数、对象等等。
	export const color = '#000';
  • export default 该模块的默认输出值,可以为变量、函数、对象,一个模块只能导出一个默认值。默认导出的内容可以无名称,因为默认导出就代表该模块,但也可以有名称,或者使用别名 as。
 	export default const color = '#fff';

使用:

  • 导入非默认内容,需要用结构的方式,因为在模块中,非默认导出的内容,都会被添加到一个变量中,用结构的方式拿出一个或多个内容。
	import { color } from './color';
  • 导入默认内容,可以直接导入即可。
 	import color from './color';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨小凹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值