亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

理解javascript模塊化

2019-11-20 10:20:13
字體:
來源:轉載
供稿:網友

模塊化是一個通用的編程最佳實踐。程序的模塊化使我們可以更方便地使用別人的代碼,想要什么功能,就加載什么模塊,從而提高代碼的利用效率,增加開發速度。

模塊就像積木,有了它,我們可以搭出各種各種功能樣式的程序。積木有什么特點?小而簡單。同樣的,我們程序中的模塊也要做到這一點,確保自己創建的函數一次只完成一個工作,這樣其他開發者可以簡單地調試與修改你的代碼,而不需瀏覽所有代碼才能弄清每一個代碼塊執行了什么功能。只有做到像這樣地小而簡單,才能實現其通用功能。

一、javascript模塊化的方法
1、函數封裝
JavaScript的作用域就是基于函數的,所以我們可以把函數作為模塊。

function fn1(){  //code}function fn2(){  //code}

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

2、對象

var myModule1 = {  fn1: function(){    //code  },  fn2: function(){    //code  }}

缺點:會暴露所有模塊成員,內部狀態可以被外部改寫

立即自執行函數――推薦

var myModule = (function(){  function fn1(){    //code  },  function fn2(){    //code  },  return {    fn1: fn1,    fn2: fn2  };})();

二、小而簡單
關于小而簡單,我們看一個例子,比如我們現在想編寫一個創建新鏈接的函數,并且為類型是"mailto"超鏈接添加一個class??梢赃@樣做:

function addLink(text, url, parentElement) {  var newLink = document.createElement('a');//創建a標簽  newLink.setAttribute('href', url);//為a標簽設置href屬性  newLink.appendChild(document.createTextNode(text));//為a標簽添加文本  if(url.indexOf("mailto:")==-1){    newLink.className = 'mail';  }  parentElement.appendChild(newLink);//將a標簽添加到頁面}

這樣寫能夠工作,但你或許會發現自己又不得進行其他的功能添加,于是,這個函數又不適用了。所以,函數越特殊,越難以適用于不同情形。
這里的函數寫法沒有達到模塊化的要求――一個函數只干一件事。我們將函數改編下:

function createLink(text,url) {  var newLink = document.createElement('a');  newLink.setAttribute('href', url);  newLink.appendChild(document.createTextNode(text));  return newLink;}

這里createLink函數只做一件事――創建并返回要添加到頁面中的a標簽(小而簡單),這樣我們就可以在任何需要創建超鏈接的情況下調用這樣函數。

三、CommonJS
在瀏覽器環境下,沒有模塊也不是特別大的問題,畢竟網頁程序的復雜性有限;但是在服務器端,一定要有模塊與操作系統和其他應用程序互動,否則根本沒法編程。雖然JavaScript在web端發展這么多年,但是第一個流行的模塊化規范卻由服務器端的JavaScript應用帶來,CommonJS規范是由NodeJS發揚光大,這標志著JavaScript模塊化編程正式登上舞臺。
node.js的模塊系統,就是依據CommonJS規范實現的。在CommonJS中,有一個全局性方法require(),用于加載模塊。
加載模塊:

var math = require('math');
調用模塊:

  math.add(2,3)
CommonJS規范不適用于瀏覽器環境,因為它存在一個重大的局限,上例中第二行math.add(2, 3)必須要在math.js加載完成后才能運行,而模塊都放在服務器端,所以可能要等很長時間,等待時間取決于網速的快慢。

CommonJS規范適用于服務器端,因為對于服務端來說,所有的模塊都存放在本地硬盤,可以同步加載完成,等待時間就是硬盤的讀取時間

四、模塊應該怎么定義和怎么加載?
AMD
Asynchronous Module Definition異步模塊定義,主要代表:require.js
目的:
(1)實現js文件的異步加載,避免網頁失去響應;
(2)管理模塊之間的依賴性,便于代碼的編寫和維護。

1、定義模塊

define(["./cart", "./inventory"], function(cart, inventory) {  //通過[]引入依賴  return {    color: "blue",    size: "large",    addToCart: function() {      inventory.decrement(this);      cart.add(this);    }  }});

2、加載模塊

require( ["some/module", "my/module", "a.js", "b.js"],function(someModule,  myModule) {  //This function will be called when all the dependencies  //listed above are loaded. Note that this function could  //be called before the page is loaded.  //This callback is optional.} );

CMD
Common Module Definition通用模塊定義,CMD規范是國內發展出來的。主要代表:sea.js

1、定義模塊

define(function(require, exports, module) { // 通過 require 引入依賴 var $ = require('jquery'); var Spinning = require('./spinning'); // 通過 exports 對外提供接口 exports.doSomething = ... // 或者通過 module.exports 提供整個接口 module.exports = ...});

2、加載模塊

seajs.use("../static/hello/src/main")
區別:

對于依賴的模塊,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.

CMD 推崇依賴就近,AMD 推崇依賴前置。

以上就是本文的全部內容,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费淫片视频软件| 亚洲成年网站在线观看| 91大神在线播放精品| 亚洲成色777777女色窝| 亚洲国产一区二区三区在线观看| 欧美中文字幕在线观看| 亚洲永久免费观看| 中文字幕亚洲一区| 成人免费在线视频网址| 亚洲欧美日韩精品久久| 国产mv免费观看入口亚洲| 久久精品亚洲热| 亚洲夜晚福利在线观看| 亚洲男人的天堂在线| 91嫩草在线视频| 国产99视频在线观看| 久久99精品国产99久久6尤物| 欧美成人精品在线观看| 亚洲国产精品久久91精品| 欧美激情三级免费| 久久久久久久久久久免费精品| 91九色视频导航| 欧美性猛交xxxx富婆| 国产欧美日韩视频| 国产精品一香蕉国产线看观看| 91在线国产电影| 狠狠躁18三区二区一区| 国产精品久久久久秋霞鲁丝| 91av视频在线免费观看| 美女福利精品视频| 欧美色道久久88综合亚洲精品| 欧美成在线观看| 国产视频亚洲精品| 国产综合视频在线观看| 91精品在线影院| 久久91亚洲精品中文字幕| 清纯唯美亚洲综合| 在线播放国产一区中文字幕剧情欧美| 91在线视频免费| 日韩电影视频免费| 国产欧美精品日韩精品| 久久亚洲国产成人| 欧美成人午夜激情视频| 国产精品久久婷婷六月丁香| 欧美精品生活片| 91影视免费在线观看| 亚洲人成在线观看| 日韩高清电影免费观看完整版| 国产一区二区在线免费视频| 热re99久久精品国产66热| 亚洲一区二区三区xxx视频| 欧洲s码亚洲m码精品一区| 精品日本高清在线播放| 日韩二区三区在线| 亚洲欧美激情在线视频| 成人黄色大片在线免费观看| 亚洲va欧美va在线观看| 狠狠操狠狠色综合网| 日韩中文娱乐网| 中文字幕不卡在线视频极品| 6080yy精品一区二区三区| www.亚洲一区| 久久99国产精品自在自在app| 欧美精品久久久久久久久| 国产精品久久久久久久久久| 欧美一二三视频| 欧美性高跟鞋xxxxhd| 欧美在线视频在线播放完整版免费观看| 国产一区二区在线免费视频| 最近中文字幕2019免费| 久久久亚洲国产| 欧美成人精品一区二区| 九九热这里只有精品免费看| 国产在线拍偷自揄拍精品| 色偷偷偷综合中文字幕;dd| 亚洲国产日韩欧美综合久久| 欧美激情视频网址| 国产精品色婷婷视频| 精品丝袜一区二区三区| 日韩美女福利视频| 7m精品福利视频导航| 欧美精品亚州精品| 亚洲视频免费一区| 欧美亚洲日本黄色| 亚洲综合中文字幕在线| 中文字幕精品在线视频| 国产欧美日韩视频| 一区二区三区四区在线观看视频| 国内精品视频在线| 亚洲国产欧美一区二区三区同亚洲| 欧美日韩国产区| 国产日韩中文在线| 伊是香蕉大人久久| 亚洲黄色www网站| 美女视频久久黄| 欧美性生交xxxxxdddd| 91欧美精品成人综合在线观看| 美女精品视频一区| 久久理论片午夜琪琪电影网| 91欧美精品午夜性色福利在线| 奇米成人av国产一区二区三区| 久久99国产综合精品女同| 久久久久久亚洲精品| 亚洲自拍中文字幕| 欧美日韩一区二区免费视频| 日韩视频中文字幕| 国产成人精彩在线视频九色| 久久久久久com| 国产精品福利小视频| 日韩最新中文字幕电影免费看| 亚洲男人天堂网| 欧美日韩xxx| 91av在线免费观看| 国产日本欧美一区二区三区在线| 国产欧美最新羞羞视频在线观看| 日韩av网站电影| 2019最新中文字幕| 亚洲欧美日韩一区二区在线| 欧美成人免费网| 国内自拍欧美激情| 午夜精品久久久久久久男人的天堂| 久久国产加勒比精品无码| 亚洲国产91色在线| 亚洲美女av在线| 亚洲欧美国产精品专区久久| 亚洲欧美资源在线| 欧美www视频在线观看| 一区二区三区国产视频| 亚洲精品免费在线视频| 国产欧美日韩中文字幕在线| 91在线视频导航| 91精品国产自产在线| 欧美激情一区二区三区高清视频| 亚洲免费av网址| 国产精品欧美日韩| 国产一区二区三区视频免费| 韩国福利视频一区| 秋霞成人午夜鲁丝一区二区三区| 国产91久久婷婷一区二区| 精品国产一区二区三区久久久狼| 亚洲成人在线网| 精品国偷自产在线| 疯狂做受xxxx欧美肥白少妇| 久久久久久久久久国产精品| **欧美日韩vr在线| 精品亚洲精品福利线在观看| 亚洲欧美综合区自拍另类| 亚洲一区二区中文字幕| 中文字幕亚洲情99在线| 中文字幕一区日韩电影| 91精品国产精品| 亚洲视频视频在线| 成人激情视频小说免费下载| 欧美日韩在线第一页| 欧美成人网在线| 精品中文字幕在线2019| 免费99精品国产自在在线| 亚洲欧洲视频在线| 欧美午夜女人视频在线| 成人国产在线视频| 久久色精品视频| 中文字幕亚洲一区二区三区五十路| 国产精品嫩草影院久久久| 中日韩美女免费视频网址在线观看|