文章目录
模块化
无模块化
1 | <script src="jquery.js"></script> |
- 容易污染全局作用域
- 引用的顺序不能调换
- 各文件的依赖关系不明显
CommonJS规范
使用4个重要的环境变量提供支持:
- module
- module.exports
- require (同步加载)
- global
特点:
- 解决了依赖,全局变量污染问题
- 同步加载模块,不适用于浏览器端
AMD规范
AMD规范是非同步加载模块,允许指定回调函数
定义了下面三个API:
- require([module], callback)
- define(id, [depends], callback)
- require.config()
1 | define(['a', 'b'], function(a, b) { |
在使用require.js的时候,必须提前加载所有的依赖,然后才可以使用,而不是需要使用时再加载(不能按需加载)
CMD
CMD可以按需加载
1 | define(function(require, exports, module) { |
ES6模块化
CommomJS和ES6区别:
- CommonJS模块输出的是一个值的拷贝,ES6输出的值是引用(ES6中是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块)
- CommonJS模块是运行时加载,ES6模块时编译时输出接口。
CommonJS加载的时一个对象,该对象只有再脚本运行完才会生成。而ES6模块不是对象,它的对外接口只是一种静态定义,再代码静态解析阶段就会生成。(动态引用,只是一个符号连接,所以对它进行重新复制会报错) - CommonJS中this指向当前模块,但是ES6中this为undefined