前言
初期的web端交互还是很简单,不需要太多的js就能实现。随着时代的的发展,用户对Web浏览器的性能也提出了越来越高的要求,浏览器也越来越多的承担了更多的交互,不再是寥寥数语的js就能解决的,那么就造成了前端代码的日益膨胀,js之间的相互依赖也会越来越多,此时就需要使用一定的规范来管理js之间的依赖。
本文主要是什么是模块化,为什么需要模块化以及现下流行的模块化规范:AMD,CMD,CommonJs,ES6。
什么是模块化
要想理解模块化是什么可以先理解模块是什么?
模块:能够独立命名并且能够独立完成一定功能的集合。
因此在js中就可以理解为模块就是能够实现特定功能独立的一个个js文件。
模块化:就可以简单的理解为将原来繁重复杂的整个js文件按功能或者按模块拆成一个个单独的js文件,然后将每一个js文件中的某些方法抛出去,给别的js文件去引用和依赖。
为什么需要模块化
一、模块化的进程
1、全局function模式:将不同的功能封装为不同的函数
缺点:污染全局命名空间,容易引起命名冲突,看不出模块间的依赖
2、namespace模式:封装为对象模式
作用:减少全局变量,解决命名冲突
缺点:数据不安全(外部函数可以修改模块内的数据),看不出模块之间的依赖
const module = {
data:1,
getData(){console.log(this.data)}
}
module.data = 2; //这样会直接修改模块内部的数据
3、IIFE模式:匿名函数自调用(闭包)
作用:解决了数据安全,数据是私有的,外部只能调用暴露的信息
缺点:需要绑定到一个全局变量上例如window向外暴露,这样也会有命名冲突的问题
4、IIFE增强模式:引入依赖
作用:解决了模块直接的依赖问题
缺点:引入js的时候需要注意引入的顺序,并且当依赖很多的时候也会有弊端
// IIFE模式:匿名函数自调用(闭包)
(function(window){
let data = '这是IIFE模式';
getData(){
console.log(data);
}
window.module = { getData }
})(window)
// IIFE增强模式
(function(window,$){
let data = '这是IIFE模式';
getData(){
console.log(data);
$('body').css('background', 'red')
}
window.module = { getData }
})(window,jQuery);
//index.html
//需要注意引入的顺序
//当