阮一峰Js学习笔记(十 模块化编程)

1、立即执行函数(不暴露私有成员变量)

var module1 = (function(){
    var _count = 0;
    var m1 = function(){
      //...
    };
    var m2 = function(){
      //...
    };
    return {
      m1 : m1,
      m2 : m2
    };
  })();

2、放大模式:模块很大 或 一个模块需要继承另一个模块

var module1 = (function (mod){
    mod.m3 = function () {
      //...
    };
    return mod;
  })(module1);

3、宽放大模式:不确定各个模块的加载顺序、"立即执行函数"的参数可以是空对象

var module1 = ( function (mod){
    //...
    return mod;
  })(window.module1 || {});

4、
目前,通行的Javascript模块规范共有两种:CommonJS和AMD。

// 在CommonJS中,有一个全局性方法require(),用于加载模块。
var math = require('math');
math.add(2,3); // 5
// 只适用于服务端环境,如果是浏览器环境:第二行math.add(2, 3),在第一行require('math')之后运行,因此必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。
// 因此,浏览器模块不能采用同步加载,需要用异步加载,这就是AMD诞生背景

5、AMD

// AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数
// require([module], callback);
require(['math'], function (math) {
    math.add(2, 3);
  });

6、require.js
6.1、目的:
(1)实现js文件的异步加载,避免网页失去响应;
(2)管理模块之间的依赖性,便于代码的编写和维护。
6.2、加载
下载最新版 https://requirejs.org/docs/download.html

js子目录下放,放网页底部 

你可能感兴趣的:(阮一峰Js学习笔记(十 模块化编程))