<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                起初被看作是一門玩具語言的JavaScript,最近已經發生了很大的變化。變化之一就是從HTML中的`<script>`標簽轉向了模塊化。 ## 模塊化 模塊就是一團黑乎乎的東西,有份文檔會教你如何使用這團東西,你只知道它的接口,但不知道它內部是如何運作的,但這個模塊能滿足你的需求。 過程、函數、類都可以稱作為模塊,它們有一個共同的特點就是封裝了功能,供外界調用。對于特定的語言,模塊所指的東西各有不同。 在Python中, > 模塊基本上就是一個包含了所有你定義的函數和變量的文件。 我們來定義一個Python的模塊: ~~~ #!/usr/bin/env python # Filename: greet.py def hello_python(): print "Hello,Python" def hello_javascript(): print "Hello,JavaScript" ~~~ 真的,就是這么簡單,我們可以這樣使用: ~~~ #!/usr/bin/env python # Filename: use_greet.py import greet # call greet module's func # print "Hello,Python" greet.hello_python() ~~~ greet.py的模塊中有兩個方法,把它們import到use_greet.py中,我們就可以使用了。 Python還提供了另外一種引入模塊的方法: ~~~ #!/usr/bin/env python # Filename: use_greet.py from greet import hello_python # call greet module's func # print "Hello,Python" hello_python() ~~~ 可以引入模塊特定的API。 ## JavaScript的模塊化 那JavaScript有模塊化嗎?我想說有,而且是與它一樣的,看下面的例子: ~~~ // File: greet.js function helloPython(){ document.write("Hello,Python"); } function helloJavaScript(){ document.write("Hello,JavaScript"); } // File:usegreet.js helloJavaScript(); ~~~ ~~~ <!DOCTYPE html> <!--index.html--> <script src="./greet.js"></script> <script src="./usegreet.js"></script> ~~~ 在瀏覽器中打開index.html: > Hello,JavaScript 可以看到,JavaScript這種通過全局共享的方式確實可以實現模塊化,你只需要在HTML中引入需要使用的模塊腳本即可。 但這樣的模塊化有兩個很實在的問題: 1. 必須通過全局變量共享模塊,有可能會出現命名沖突的問題; 2. 依賴的文件必須手動地使用標簽引入到頁面中。 ### Node.js的模塊化 這些問題如何解決呢?我們要不再來看一下Node.js的模塊。你應該知道Node.js,現在它是火得不行! ~~~ // File:greet.js exports.helloPython = function() { console.log("Hello,Python"); } exports.helloJavaScript = function() { console.log("Hello,JavaScript"); } // File: usegreet.js var greet = require("./greet"); greet.helloJavaScript(); ~~~ 運行`node usegreet.js`,控制臺會打印: > Hello,JavaScript Node.js把JavaScript移植到了Server端的開發中,Node.js通過exports和require來實現了代碼的模塊化組織。在一個Node.js的模塊文件中,我們可以使用exports把對外的接口暴露出來,其他模塊可以使用require函數加載其他文件,獲得這些接口,從而使用模塊提供出來的功能,而不關心其實現。在npmjs.org上已經有上萬的Node.js開源模塊了! ## ECMA標準草案 Node.js模塊化的組織方案是Server端的實現,并不能直接在瀏覽器中使用。JavaScript原生并沒有支持`exports`和`require`關鍵字。ECMAScript6標準草案harmony已經考慮到了這種模塊化的需求。舉個例子: ~~~ // Define a module module 'greet' { export function helloPython() { console.log("Hello,Python") } export function helloJavaScript() { console.log("Hello,JavaScript") } } // Use module import {helloPython, helloJavaScript} from 'greet' helloJavaScript() // Or module Greet from 'greet' Greet.helloJavaScript() // Or remote module module Greet from 'http://bodule.org/greet.js' Greet.helloJavaScript() ~~~ 可以到這里查看更多的[例子](http://wiki.ecmascript.org/doku.php?id=harmony:modules_examples)。 參考[es6-module-transpiler](http://square.github.io/es6-module-transpiler/)和[es6-module-loader](https://github.com/ModuleLoader/es6-module-loader)這兩個項目。 不過該標準還處于草案階段,沒有主流的瀏覽器所支持,那我們該怎么辦?恩,已經有一些先行者了。 ## LABjs [LABjs](https://github.com/getify/LABjs)是一個動態的腳本加載類庫,替代難看的,低性能的`<script>`標簽。該類庫可以并行地加載多個腳本,可按照需求順序執行依賴的代碼,這樣在保證依賴的同時大大提高的腳本的加載速度。 LABjs已經三歲了,其作者getify聲稱,由于社區里大家更喜歡使用AMD模式,隨在2012年7月25號停止對該類庫的更新。但LABjs絕對是JavaScript在瀏覽器端模塊化的鼻祖,在腳本加載方面做了大量的工作。 ## requirejs 與LABjs不同的地方在于,RequireJS是一個動態的模塊加載器。其作者James Burke曾是Dojo核心庫loader和build system的開發者。2009年隨著JavaScript代碼加載之需要,在Dojo XDloader的開發經驗基礎之上,它開始了新項目RunJS。后更名為RequireJS,在AMD模塊提案指定方面,他起到了重要的作用。James從XDloader到RunJS 再到RequireJS一直在思考著該如何實現一個module wrapper,讓更多的js、更多的node模塊等等可以在瀏覽器環境中無痛使用。 ## seajs seajs相對于前兩者就比較年輕,2010年玉伯發起了這個開源項目,SeaJS遵循CMD規范,與RequireJS類似,同樣做為模塊加載器。那我們如何使用seajs來封裝剛才的示例呢? ~~~ // File:greet.js define(function (require, exports) { function helloPython() { document.write("Hello,Python"); } function helloJavaScript() { document.write("Hello,JavaScript"); } exports.helloPython = helloPython; exports.helloJavaScript = helloJavaScript; }); // File:usegreet.js sea.use("greet", function (Greet) { greet.helloJavaScript(); }); ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看