久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      手把手教你使用JS給通用模塊寫法(代碼詳解)

      之前的文章《淺析JavaScript中時(shí)間戳運(yùn)算的方法(附代碼)》中,給大家了解了js中時(shí)間戳運(yùn)算的方法。下面本篇文章給大家怎么使用JS給通用模塊寫法,我們一起看看怎么做。

      手把手教你使用JS給通用模塊寫法(代碼詳解)

      模塊化這個(gè)問題并非一開始就存在,WWW剛剛問世的時(shí)候,html,JavaScriptCSSJSCSS都是后來在網(wǎng)景被引進(jìn)瀏覽器的)都是極其簡(jiǎn)單的存在,不需要模塊化。

      模塊化的需求是規(guī)模的產(chǎn)物,當(dāng)web page進(jìn)化到web application,瀏覽器端處理的邏輯越來越復(fù)雜,展現(xiàn)的樣式和動(dòng)畫越來多,對(duì)于工程的要求也就越來越高。于是模塊化的需求也就產(chǎn)生了。模塊化的意義:

      • 組件的復(fù)用,降低開發(fā)成本和維護(hù)成本

      • 組件單獨(dú)開發(fā),方便分工合作

      • 模塊化遵循標(biāo)準(zhǔn),方便自動(dòng)化依賴管理,代碼優(yōu)化,部署

      JavaScript長(zhǎng)久以來被認(rèn)為是簡(jiǎn)單的腳本語言,實(shí)際上情況早就發(fā)生來變化,在最新版的 ECMA-262(ES6)文檔中強(qiáng)調(diào)JavaScript是通用編程語言而不是腳本語言。腳本語言,比如shell并不是用來完成復(fù)雜功能的,只是用來做一些自動(dòng)化控制,是不需要模塊化的。而用于構(gòu)建復(fù)雜系統(tǒng)通用編程語言(比如Java)一般都有模塊的實(shí)現(xiàn)。

      ES6以前,JS語言沒有模塊化,如何讓JS不止運(yùn)行在瀏覽器,且能更有效的管理代碼, 于是應(yīng)運(yùn)而生CommonJS這種規(guī)范,定義了三個(gè)全局變量:

      require,exports,module
      • require用于引入一個(gè)模塊

      • exports對(duì)外暴露模塊的接口,可以是任何類型

      • module是這個(gè)模塊本身的對(duì)象

      require引入時(shí)獲取的是這個(gè)模塊對(duì)外暴露的接口(exports

      Node.js使用了CommonJS規(guī)范:

      var foo = require("foo"); var out = foo.sayName(); module.exports = out;

      在瀏覽器端,不像Node.js內(nèi)部支持CommonJS,如何進(jìn)行模塊化,于是出現(xiàn)了CMDAMD兩種方式,其主要代表是seajsrequirejs,他們都定義了一個(gè)全局函數(shù)define來創(chuàng)建一個(gè)模塊:

      //CMD define(function (require, exports, module) {   var foo = require("foo");   var out = foo.sayName();   module.exports = out; });  //AMD define(["foo"], function (foo) {   var out = foo.sayName();   return out; });

      可以看出CMD完好的保留了CommonJS的風(fēng)格, 而AMD用了一種更簡(jiǎn)潔的依賴注入和函數(shù)返回的方式實(shí)現(xiàn)模塊化。 兩者除風(fēng)格不同外最大區(qū)別在于加載依賴模塊的方式,CMD是懶加載,在require時(shí)才會(huì)加載依賴, 而AMD是預(yù)加載,在定義模塊時(shí)就提前加載好所有依賴。

      我們要實(shí)現(xiàn)一個(gè)模塊,讓它既能在seajs(CMD)環(huán)境里引入,又能在requirejs(AMD)環(huán)境中引入,當(dāng)然也能在Node.js(CommonJS)中使用,另外還可以在沒有模塊化的環(huán)境中用script標(biāo)簽全局引入。

      首先搞一個(gè)模塊

      var factory = function () {   var moduleName = {};   return moduleName; };

      當(dāng)然return輸出的可以是任何值,對(duì)象,類,其他都可以

      首先滿足Node.js或者ES6,我們可以通過全局變量moduleexports來判斷

      var factory = function () {   var moduleName = {};   return moduleName; }; if (typeof module !== "undefined" && typeof exports === "object") {   module.exports = factory; }

      CMDAMD中,我們需要提供一個(gè)工廠函數(shù)傳入define來定義模塊,當(dāng)沒有上述全局變量,且有define全局變量時(shí),我們認(rèn)為是AMDCMD,可以直接將factory傳入define

      var factory = function () {   var moduleName = {};   return moduleName; }; if (typeof module !== "undefined" && typeof exports === "object") {   module.exports = factory; } else if (typeof define === "function" && (define.cmd || define.amd)) {   define(factory); }

      注意:CMD 其實(shí)也支持 return 返回模塊接口,所以兩者可以通用。

      然后還要滿足script標(biāo)簽全局引入,我們可以將模塊放在window上,為了模塊內(nèi)部在瀏覽器和Node.js中都能使用全局對(duì)象,我們可以做此判斷:

      var global = typeof window !== "undefined" ? window : global;

      我們用一個(gè)立刻執(zhí)行的閉包函數(shù)將所有代碼包含,來避免污染全局空間,并將global對(duì)象傳入閉包函數(shù),最終變成這樣:

      (function (global) {   var factory = function () {     var moduleName = {};     return moduleName;   };   if (typeof module !== "undefined" && typeof exports === "object") {     module.exports = factory;   } else if (typeof define === "function" && (define.cmd || define.amd)) {     define(factory);   } else {     global.factory = factory;   } })(typeof window !== "undefined" ? window : global);

      注意:閉包前加上分號(hào)是為了給前一個(gè)模塊填坑,分號(hào)多了沒問題,少了則語句可能發(fā)生變化。

      然后,就能愉快的調(diào)用了

      //Node.js var myModule = require('moduleName')  //Seajs define(function(require,exports,module){   var myModule = require('moduleName') })  // Browser global <script src='moduleName.js'></script>

      【完】

      推薦學(xué)習(xí):JavaScript高級(jí)教程

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)