javaScript模块化

1.为什么要进行模块化?

这是因为在早期浏览器进行脚本的加载的时候,如果逻辑代码全都在一个页面上的脚本里面,那么会造成浏览器执行的效率低,造成臃肿,开发人员可读性差,这个时候就将各个js代码分为不同的js文件夹,处理不同的业务,然后在统一在html的页面上引入。

这个时候就会出现一些问题了,我们会发现声明的变量会覆盖-->变量重名-->会造成全局污染,并且引入的js加载顺序,是按照各个js文件的逻辑顺序从上到下加载的,改变其中的任意一个,则会进行报错。

2.模块化的进程

这个时候模块化就出来,在es5的时候,早期进行模块化的操作是利用立即执行函数来解决,它可以解决全局污染的问题,因为它里面有独立的作用域,但是还是解决不了js的加载的顺序问题。

Nodejs的诞生带来了前所未有的体验------它通过require引入模块,module.exports来导出模块,他是基于node环境来运行的,也叫做CommJs,这是一种规范,它也是一种同步的方法,它对缓存有一种很好的机制,会对模块进行缓存,只要你不改变引入的模块,那么它就不会再次引入加载,它只会在服务端进行,客户端运行不了。

 

 为了解决这个问题,AMD就出来了,它可以在客户端运行,它通过以下来加载模块,define("模块的名称",“依赖的模块”, “函数”), 它有个特点就是引入的模块会前置依赖,也就是require(),当这里面有多个模块时,会一个一个执行,只有当前面执行完才会执行后面的

 

 

CMD---它的特点就是,依赖就近,按需加载,也就是当我需要模块的时候,我再去加载该模块

 

 以上这些都是民间写法,并不是官方的,后面es6里面就出了官方的模块化,通过import 导入,export导出来加载模块化,它跟Commonjs有个很大的不同,CommonJs导入的模块是拷贝的,es6则是值的引用,CommonJs是在运行时进行加载,es6的话则是编译时加载

 

posted @ 2021-04-06 19:06  江上雪  阅读(67)  评论(0编辑  收藏  举报