1.为什么要使用模块化?
- 解决命名冲突
- 依赖管理
- 代码解耦,提高复用性
- 提高代码可读性
2.CMD、AMD、CommonJS 规范分别指什么?有哪些应用
- CommonJS主要用于服务端模块化,node.js就是遵循CommonJS标准,CommonJS依赖node.js提供模块化的功能,它是一个同步的标准,示例代码如下:
//这是test1.js文件
var people = {
name: 'jinlong',
sayName: function () {
console.log(this.name);
}
}
module.exports = people;
//这是test2.js文件
var p = require('./test1');
p.sayName();
在终端中打开test2.js文件,输出sayName的返回值,如图所示:
- 然后是AMD , 当使用CommonJS规范的JS在浏览器端运行的话,就会出现一个问题,require的时候必须等待test1.js文件加载完,才可以引用,什么时候加载完,取决于你的网速,所以这个加载的时间如果过长的话,就会造成网页假死的现象。所以我们需要一个异步的模块化,所以就有了AMD(Asynchronous Module Definition),AMD的require和CommonJS不同,它的形式如下:
/*
require([module], callback);
*/
require('test1', function(test1){
test1.sayName();
})
test1和 sayName不是同步的,所以浏览器不会假死,AMD适合浏览器环境。AMD一般使用require.js来提供模块化的功能。
- CMD(Common Module Definition) , 通用模块定义,他是sea.js在推广的时候所产生的一个新的模块规范,也是用于浏览器端,不过现在很少人用了, CMD也是异步加载,它与AMD不同之处在于对依赖模块的执行时机不同,AMD依赖前置,JS可以方便的知道依赖哪个模块,立即加载。而CMD是就近依赖,它需要先把模块解析为字符串,才知道使用了哪些模块。在 CMD 规范中,一个模块就是一个文件。代码的书写格式如下:
define(factory);
示例:
//math.js
define(function(require, exports, module) {
exports.add = function() {
var sum = 0, i = 0, args = arguments, l = args.length;
while (i < l) {
sum += args[i++];
}
return sum;
};
});
//increment.js
define(function(require, exports, module) {
var add = require('math').add;
exports.increment = function(val) {
return add(val, 1);
};
});
//program.js
define(function(require, exports, module) {
var inc = require('increment').increment;
var a = 1;
inc(a); // 2
module.id == "program";
});
3.使用 requirejs 完善入门任务15,包括如下功能:
- 首屏大图为全屏轮播
- 有回到顶部功能
- 图片区使用瀑布流布局(图片高度不一),下部有加载更多按钮,点击加载更多会加载更多数据(数据在后端 mock)
- 使用 r.js 打包应用
github地址链接