js模块化

本文介绍了JavaScript中的几种模块化实现,包括立即执行函数IIFE,CommonJS(CJS)及其同步加载问题,AMD的异步加载和回调机制,UMD的兼容性,CMD的按需加载,以及ESM模块的export/import。
摘要由CSDN通过智能技术生成

最初的模块化雏形: IIFE 立即执行函数

(function(){
	// code
})()

1.commonjs CJS

  • 优点:解决了全局变量污染,依赖的问题
  • 缺点:它是同步加载模块,不能解决异步问题
//a.js
module.exports={
	getSum(arr){
		return arr.reduce((cur, per)=>cur+per,0)
	},
	getAverage(arr){
		const sum = arr.reduce((cur, per)=>cur+per,0)
		return sum/arr.length
	}
}
//main.js
const m = require('a.js')
m.getSum([1,2,3,4,5])
m.getAverage([1,2,3,4,5,6,7,8,9])

2.AMD

允许为非同步加载的模块制定回调函数

//语法
define(id, [deps], callback)
require([deps], callback)

// 加载异步模块
define('module',['module1','module2'], (module1, module2)=>{
	let count = 0
	const increase = ()=>{
		count++;
	}
	const decrease = ()=>{
		count--
	}
	return {
		increase,
		decrease
	}
})

require(['module'],(module)=>{
	module.increate()
})

// 加载同步模块
// AMD支持向前兼容的,以提供回调的形式来做require方法动态加载模块
define(require=>{
	const module1 = require('module1')
	const module2 = require('module2')

	let count = 0
	const increase = ()=>{
		count++;
	}
	const decrease = ()=>{
		count--
	}

	exports.increase=increase
	exports.decrease=decrease
})

缺点: 需要加载所有依赖模块

3.UMD

统一兼容AMD和commonjs 断判区分是否为AMD or common

优点:适合在浏览器环境中异步加载模块,同时又已采用common模块
缺点:提高了开发成本,并且不能按需加载,必须提前加载所有依赖

4.CMD

支持按需加载 不需要想CMD那样加载所有模块

5.ESM es module

语法: export import

// a.js
const a = 1;
const b = 2
export const getNumber = ()=>{
	return [a,b]
}
export default {
 	a,
	b
}

// main.js

import AModule,{getNumber} from 'a.js'
getNumber()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值