if(xx){ //....... } else{ //xxxxxxxxxxx } for(var i=0; i<10; i++){ //........ } element.onclick = function(){ //....... }
<script type="text/javascript" src="a.js"></script> <script type="text/javascript" src="b.js"></script>
modA = function(){ var a,b; //變量a、b外部不可見 return { add : function(c){ a + b + c; }, format: function(){ //...... } } }()
app.util.modA = xxx; app.tools.modA = xxx; app.tools.modA.format = xxx;
app.tools.modA.format();
(function(window){ //代碼 window.jQuery = window.$ = jQuery;//經過給window添加屬性而暴漏到全局 })(window);
1. 模塊的標識應遵循的規則(書寫規範)2. 定義全局函數require,經過傳入模塊標識來引入其餘模塊,執行的結果即爲別的模塊暴漏出來的API3. 若是被require函數引入的模塊中也包含依賴,那麼依次加載這些依賴4. 若是引入模塊失敗,那麼require函數應該報一個異常5. 模塊經過變量exports來嚮往暴漏API,exports只能是一個對象,暴漏的API須做爲此對象的屬性。
//math.js exports.add = function() { var sum = 0, i = 0, args = arguments, l = args.length; while (i < l) { sum += args[i++]; } return sum; };
//increment.js var add = require('math').add; exports.increment = function(val) { return add(val, 1); };
//program.js var inc = require('increment').increment; var a = 1; inc(a); // 2
1. 全局有一個module變量,用來定義模塊2. 經過module.declare方法來定義一個模塊3. module.declare方法只接收一個參數,那就是模塊的factory,次factory能夠是函數也能夠是對象,若是是對象,那麼模塊輸出就是此對象。4. 模塊的factory函數傳入三個參數:require,exports,module,用來引入其餘依賴和導出本模塊API5. 若是factory函數最後明確寫有return數據(js函數中不寫return默認返回undefined),那麼return的內容即爲模塊的輸出。
//可使用exprots來對外暴漏API module.declare(function(require, exports, module) { exports.foo = "bar"; });
//也能夠直接return來對外暴漏數據 module.declare(function(require) { return { foo: "bar" }; });
1. 用全局函數define來定義模塊,用法爲:define(id?, dependencies?, factory);2. id爲模塊標識,聽從CommonJS Module Identifiers規範3. dependencies爲依賴的模塊數組,在factory中需傳入形參與之一一對應4. 若是dependencies的值中有"require"、"exports"或"module",則與commonjs中的實現保持一致5. 若是dependencies省略不寫,則默認爲["require", "exports", "module"],factory中也會默認傳入require,exports,module6. 若是factory爲函數,模塊對外暴漏API的方法有三種:return任意類型的數據、exports.xxx=xxx、module.exports=xxx7. 若是factory爲對象,則該對象即爲模塊的返回值
//a.js define(function(){ console.log('a.js執行'); return { hello: function(){ console.log('hello, a.js'); } } });
//b.js define(function(){ console.log('b.js執行'); return { hello: function(){ console.log('hello, b.js'); } } });
//main.js require(['a', 'b'], function(a, b){ console.log('main.js執行'); a.hello(); $('#b').click(function(){ b.hello(); }); })
define(['a', 'b', 'c', 'd', 'e', 'f', 'g'], function(a, b, c, d, e, f, g){ ..... })
define(function(){ console.log('main2.js執行'); require(['a'], function(a){ a.hello(); }); $('#b').click(function(){ require(['b'], function(b){ b.hello(); }); }); });
var a = require('a'); a.hello(); $('#b').click(function(){ var b = require('b'); b.hello(); });
//d.js define(function(require, exports, module){ console.log('d.js執行'); return { helloA: function(){ var a = require('a'); a.hello(); }, run: function(){ $('#b').click(function(){ var b = require('b'); b.hello(); }); } } });
require(['d'], function(d){ });
//a.js define(function(require, exports, module){ console.log('a.js執行'); return { hello: function(){ console.log('hello, a.js'); } } });
//b.js define(function(require, exports, module){ console.log('b.js執行'); return { hello: function(){ console.log('hello, b.js'); } } });
//main.js define(function(require, exports, module){ console.log('main.js執行'); var a = require('a'); a.hello(); $('#b').click(function(){ var b = require('b'); b.hello(); }); });
var b = require.async('b'); b.hello();
//方式一, a.js export var a = 1; export var obj = {name: 'abc', age: 20}; export function run(){....}
//方式二, b.js var a = 1; var obj = {name: 'abc', age: 20}; function run(){....} export {a, obj, run}
import {run as go} from 'a'
run()
module foo from 'a'
console.log(foo.obj);
a.run();