1. 在接觸規(guī)范之前,我們用模塊化來封裝代碼大多為如下:

;(function (形參模塊名, 依賴項, 依賴項) {
  // 通過 形參模塊名 修改模塊

  window.模塊名 = 形參模塊名
 })(window.模塊名 || {}, 依賴項, 依賴項)
  1. 分號是什么作用?

    答:為了防止前面的代碼沒有添加分號造成語法解析錯誤,也可能會是 "!", "+" 等
  2. 為什么要將代碼放入一個自執(zhí)行函數中

    答:為了避免全局命名空間污染,核心就是利用函數的私有作用域
  3. 為什么將依賴項作為參數傳進來

    答:為了減少作用域查找機制

2. 常見的 JavaScript 模塊化規(guī)范

規(guī)范其實就是這些庫在推廣的過程中逐漸形成的一套規(guī)則。

所謂的規(guī)范也就是:

定義了模塊的書寫格式

以及模塊之間的交互規(guī)則

Node 環(huán)境

CommonJS

瀏覽器環(huán)境

AMD

    RequireJS
CMD Common Module Definition

    CMD 就是 SeaJS 這個模塊加載器在推廣的過程中定義的一個模塊規(guī)范
ECMAScript

    ECMAScript 6

CMD、AMD、CommonJS 都是社區(qū)制定出來的模塊規(guī)范,他們的目的都是為了解決 JavaScript 沒有模塊化系統的問題。 他們都有如何定義模塊成員,以及模塊成員之間如何進行通信交互的規(guī)則。

1.SeaJS基本介紹

  1. 在SeaJS中,一個js腳本文件就是一個模塊

    模塊具有兩個特性:

    1. 模塊要有一個私有作用域:避免全局命名空間污染
    2. 模塊可以向外導出內部成員,供別的模塊加載和使用

    所以:只要使用了SeaJS,那所有的js文件都通過define函數去定義該模塊,并且將所有的模塊代碼寫到 define 定義的回調函數中

    define 方法的回調函數中分別傳遞三個固定參數:

    1. require:
    2. exports
    3. module
  2. 每一個模塊中有一個require函數可以用來加載指定模塊,需要接收一個模塊路徑

    1. 加載指定模塊并且執(zhí)行該模塊中的代碼
    2. 得到該模塊中的暴露的接口對象:module.exports
  3. 模塊的作用域和導出

    模塊天生就是一個私有作用域,在該模塊內部定義的所有成員

    如果模塊內部的成員想要被外部所訪問:

    必須通過使用