模块化

2018-07-27  本文已影响0人  小淘气_嘻

模块化概念: 实现特定功能的一组方法

原始“类模块”写法

function m1(){}
function m2(){}

缺点:污染了全局变量,模块成员之间没直接关系

对象“类模块”写法

var module = new Object({
    _count:0,
    m1:function(){},
    m2:function(){}
})

缺点: 使用时直接调用对象属性,module.m1(),会暴露所有模块成员,内部状态可以被外部改写

立即执行函数写法(IIFE)

var module = (function(){
    var _count = 0;
    var m1 = function(){};
    var m2 = function(){}
    return{
      m1: m1,
      m2:m2
    }
})();

优点:不暴露私有成员,也不造成全局变量污染

此module就是JavaScript模块的基本写法

主流模块规范

ES6 module.
ES6之前:

  • CommonJS
  • AMD

CommonJS

AMD 和CMD采用require方式应用
浏览器的模块加载,同步容易阻塞,只能异步加载(AMD)
CMDAMD都是用 define()来定义模块,用require()来引用

AMD:Asynchronous Module Definition

define(thename, ['Lib'],function(Lib){})
//AMD的模块加载  不会发生假死。AMD适合浏览器环境
require(['math'],function(math){ })

CMD: Common Module Definition

define('hello',['jquery'],function(require,exports,module){ //模块代码 })

AMD VS CMD

ES6 Module标准

export

命名式导出

//一个模块里这样写
export function cube(){}
const foo = Math.PI;
export {foo};
//另一个模块引用
import {cube, foo} from ...

默认导出

//命名式导出多个模块
export const foo = Math.sqrt(2)  导出一个常量
export { name1, name2, name3}
export { variable as name1, variable as name, ...nameN }
export let name1,name2, ...nameN 

//导出定义的变量和常量
export let name1 = .., name2=...,nameN;

//默认导出,只能导出单个模块
export default expression;
export default function(){}
export default function name1(){}
export {name2 as default ,...}

//从已存在的模块,脚本文件..导出
export * from ..;
export {name1, name2} from ....;
export {import1 as name1, import2 as name2...,nameN} from ...

import

//default
import default Member from "module-name";
//等同于export {a as default}
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
//*导入所有
import defaultMember, * as name from "module-name";
//导入一个模块不进行任何绑定
import "module-name";

Module.exports VS exports

上一篇 下一篇

猜你喜欢

热点阅读