無組織的函數們
在我最初開始寫 JavaScript 函數時,通常是這樣的:
代碼如下function fun1() {
// some code here
}
function fun2() {
// some other code here
}
...
函數全寫在全局環境中,項目很小時,通常不會有什麼沖突問題。
但代碼多了後,漸漸就發現,函數名稱(英文詞匯)有點不夠用了。於是引入命名空間的概念,開始模塊化代碼。
命名空間下的函數
在命名空間下,我的代碼這樣寫:
代碼如下var com = com || {};
com.zfanw = com.zfanw || {};
com.zfanw.module1 = (function() {
// some code here
return {
func1: func1,
...
};
}());
com.zfanw.module2 = (function() {
// some other code here
return {
func1: func1,
...
};
}());
...
本著要面向對象的原則,執行函數通常我要這麼寫的:
com.zfanw.module1.func1.apply({},['arg1',arg2]);
...
當然,為了少打些字符,我還會在閉包中導入1公共 API 接口:www.45it.com
代碼如下(function($, mod1) {
// some code here
mod1.func1.apply({},['arg1',arg2]);
}(jQuery, com.zfanw.module1));
...
至此,代碼沖突的可能性已經很小,但代碼依賴的問題,多腳本文件管理、阻塞的問題,漸漸浮出水面 – 命名空間的辦法開始捉急。
於是 Require.js2 出場。
Require.js
首先了解下 require.js 裡模塊的概念3:
A module is different from a traditional script file in that it defines a well-scoped object that avoids polluting the global namespace. It can ex