js 模塊化基礎和模塊規范AMD、CMD、ES6模塊

      網友投稿 834 2025-04-02

      一、模塊基礎


      1、基于文件的模塊化

      把相關函數寫在一個文件里

      1

      2

      3

      4

      5

      6

      7

      8

      9

      缺點:污染了全局變量,無法保證不與其他模塊發生變量名沖突

      2、基于對象的模塊化

      把所有的模塊成員封裝在一個對象中

      1

      2

      3

      4

      5

      6

      7

      優點:避免了變量污染,只要保證模塊名唯一即可

      缺陷:外部可以隨意修改內部成員

      3、基于函數的模塊化

      通過立即執行函數返回對象

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      優點:模塊外部無法修改我們沒有暴露出來的變量、函數

      二、javaScript 模塊規范

      其中【基于函數的模塊化】是模塊化的基礎

      目前,通行的 javaScript 模塊規范主要有兩種:CommonJS 和 AMD

      1、Node.js 實現 CommonJS

      定義模塊:一個文件就是一個模塊,有單獨的作用域

      js 模塊化基礎和模塊規范AMD、CMD、ES6模塊

      模塊輸出:要導出的內容放入 module.exports 對象

      加載模塊:require 返回 module.exports 對象

      eg:

      定義模塊

      // a.js function func() { console.log("func"); } module.exports = { func: func, };

      1

      2

      3

      4

      5

      6

      7

      8

      9

      加載模塊

      // b.js const myModule = require("./a"); myModule.func();

      1

      2

      3

      4

      5

      以上方法瀏覽器不直接支持

      2、AMD 異步模塊定義

      Asynchronous Module Definition

      由 require.js 支持

      文檔:https://requirejs.org/

      實現接口:

      // 定義模塊 define(id?, dependencies?, factory); id:模塊的標識,默認腳本文件名 dependencies:當前模塊依賴的模塊名稱數組 factory:模塊初始化要執行的函數或對象 // 加載模塊 require(dependencies, callback); dependencies: 所依賴的模塊數組 callback: 前面指定的模塊都加載成功后的回調函數

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      eg:

      1、下載

      wget https://cdn.bootcdn.net/ajax/libs/require.js/2.3.6/require.min.js

      1

      2、helper.js 定義模塊

      // 模塊名,模塊依賴,模塊的實現function define(function () { return { func: function () { console.log("hello"); }, }; });

      1

      2

      3

      4

      5

      6

      7

      8

      2、app.js 引入模塊

      require(["helper"], function (helper) { helper.func(); });

      1

      2

      3

      3、index.html 瀏覽器中使用

      1

      3、CMD 通用模塊定義

      Common Module Definition

      由 Sea.js 支持

      文檔:https://seajs.github.io/seajs/docs/#intro

      實現接口

      // 定義模塊 define(id?, deps?, factory) 一般不在define的參數中寫依賴 factory = function(require, exports, module) require 用來獲取其他模塊提供的接口:require(id) exports 用來向外提供模塊接口 module 存儲了與當前模塊相關聯的一些屬性和方法

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      eg:

      1、下載

      wget https://cdn.bootcdn.net/ajax/libs/seajs/3.0.3/sea.js

      1

      2、helper.js 定義模塊

      define(function (require, exports, module) { exports.func = function () { console.log("hello"); }; });

      1

      2

      3

      4

      5

      3、app.js 引入模塊

      define(function (require, exports, module) { var helper = require("helper"); helper.func(); });

      1

      2

      3

      4

      4、index.html 瀏覽器中使用

      1

      2

      3

      4

      5

      4、AMD 與 CMD 區別

      AMD 推崇依賴前置,在定義模塊的時候就要聲明其依賴的模塊

      CMD 推崇就近依賴,只有在用到某個模塊的時候再去 require

      三、ES6 模塊

      1、ES6 模塊與 CommonJS 模塊的差異

      以下這些頂層變量在 ES6 模塊之中都是不存在的

      arguments require module exports __filename __dirname

      1

      2

      3

      4

      5

      6

      2、模塊加載

      1、傳統方法

      1

      2

      3

      4

      5

      6

      7

      瀏覽器腳本的默認語言是 JavaScript,因此 type="application/javascript"可以省略

      默認情況下,瀏覽器是同步加載 JavaScript 腳本,執行完腳本,再繼續向下渲染

      2、異步加載腳本

      1

      2

      3

      4

      5

      3、ES6 加載

      1

      2

      3

      eg:

      模塊文件 demo.js

      export default function () { console.log("demo"); }

      1

      2

      3

      主文件 index.html

      1

      2

      3

      4

      參考

      前端模塊化,AMD 與 CMD 的區別

      Module 的加載實現

      elasticsearch JavaScript

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Linux開發_動態靜態庫創建與Makefile規則
      下一篇:Word中表格和文字轉換的私密秘技(word里面文字轉表格)
      相關文章
      亚洲AV成人影视在线观看| 久久丫精品国产亚洲av| 亚洲1区1区3区4区产品乱码芒果| 亚洲AV日韩AV永久无码绿巨人| 久久久久久A亚洲欧洲AV冫| 国产亚洲蜜芽精品久久| 久久精品国产亚洲av瑜伽| 亚洲欧好州第一的日产suv| 亚洲熟妇无码一区二区三区| 亚洲综合一区二区三区四区五区| 激情亚洲一区国产精品| 午夜在线a亚洲v天堂网2019| 亚洲首页国产精品丝袜| 亚洲欧美一区二区三区日产| 亚洲AV无码成人精品区狼人影院| 国产精品亚洲av色欲三区| 青草久久精品亚洲综合专区| 亚洲?V乱码久久精品蜜桃| 亚洲男人的天堂一区二区| 亚洲中文字幕日产乱码高清app| 亚洲熟妇无码乱子AV电影| 亚洲av无码片在线播放| 亚洲国产人成网站在线电影动漫| 亚洲国产综合精品中文第一区| 91在线亚洲精品专区| 亚洲av永久综合在线观看尤物| 国产精品亚洲午夜一区二区三区 | 亚洲宅男天堂a在线| 亚洲国产美女视频| 国产人成亚洲第一网站在线播放| 亚洲人成欧美中文字幕| 免费观看亚洲人成网站| 国产亚洲AV夜间福利香蕉149| 国产成人A人亚洲精品无码| 久久久亚洲裙底偷窥综合| 亚洲午夜电影在线观看| 亚洲精品乱码久久久久久蜜桃图片| 亚洲AV无码成人精品区日韩| 久久久久亚洲AV成人网| 亚洲欧洲在线观看| 亚洲天堂2017无码中文|