标签:efi module 从服务器 cmd 环境 提前 兼容 模块 对象
前一篇文章了解了什么是模块,这一篇就简单介绍一下如何定义并加载一个模块。
1 // student.js 2 // 私有变量 3 var a = 123; 4 function add(student) { 5 console.log(‘Add student:‘ + student); 6 } 7 // exports对象上的方法和变量是外部可访问的 8 exports.add = add;
1 // 使用require加载student.js模块 2 var student = require(‘./student.js‘);
CommonJS加载模块是“同步”的,也就是说,如果我们要调用被调用模块中的公共方法和变量,一定要等被调用模块加载完毕后才可以。用于服务端的NodeJS就采用的CommonJS来管理模块。但是在浏览器端,同步加载会因为收到网络环境的影响存在很大的不确定性,所以CommonJS不适合于浏览器端。
如果在浏览器环境下想要从服务器加载模块,就必须使用“异步”的方式。所以就出现了AMD和CMD解决方案。
1 //define(param1,param2) 通过define方法定义模块 2 //@param1: 数组,元素为引入的依赖模块 3 //@param2: 回调函数,通过形参传入依赖 4 define([‘firstModule‘,‘secondModule‘],function(firstModule,secondModule){ 5 function foo(){ 6 firstModule.test(); 7 } 8 // 暴露foo() 9 return {foo:foo}; 10 });
同时,AMD允许使用define方法定义模块是兼容CommonJS规范,可以使用require和exports。
1 define(function(require,exports,module){ 2 var reqModule = require("./firstModule"); 3 reqModule.test(); 4 5 exports.pubPort = function(){ 6 // 函数体 7 } 8 });
1 // AMD——依赖前置 2 define([‘./a‘,‘./b‘],function(a,b){ 3 //提前声明要依赖的模块 4 }); 5 6 // CMD 7 define(function(require,exports,module){ 8 //依赖可以就近写 9 var a = require(‘./a‘); 10 a.test(); 11 12 //软依赖 13 if(status){ 14 var b = require(‘./b‘); 15 b.test(); 16 } 17 });
JavaScript模块化思想之CommonJS、AMD、CMD、UMD
标签:efi module 从服务器 cmd 环境 提前 兼容 模块 对象
原文地址:http://www.cnblogs.com/enjoymylift/p/6031228.html