你不知道的javascript讀書筆記

這本書真的挺不錯的,感覺以前很多不敢碰,很迷茫的問題都解決好多,看到模塊化記錄一下自己的理解

下面是代碼:

var MyModules = (function Manager() {
var modules = {};
function define(name, deps, impl) {
        for (var i=0; i<deps.length; i++) {
            deps[i] = modules[deps[i]];
        }
        modules[name] = impl.apply( impl, deps );
}
function get(name) {
        return modules[name];
}
作用域閉包 | 55
return {
        define: define,
        get: get
};
})();
這段代碼的核心是 modules[name] = impl.apply(impl, deps)。爲了模塊的定義引入了包裝
函數(可以傳入任何依賴),並且將返回值,也就是模塊的 API,儲存在一個根據名字來管
理的模塊列表中。
下面展示瞭如何使用它來定義模塊:
MyModules.define( "bar", [], function() {
function hello(who) {
            return "Let me introduce: " + who;
}
return {
            hello: hello
};
} );
MyModules.define( "foo", ["bar"], function(bar) {
         var hungry = "hippo";
        function awesome() {
            console.log( bar.hello( hungry ).toUpperCase() );
        }
        return {
            awesome: awesome
        };
} );
var bar = MyModules.get( "bar" );
var foo = MyModules.get( "foo" );
console.log(
            bar.hello( "hippo" )
); // Let me introduce: hippo

foo.awesome(); // LET ME INTRODUCE: HIPPO

代碼有點亂,手動縮進一波,看起來還好主要代碼

modules[name] = impl.apply( impl, deps );//意思就是改變參數執行impl這個函數

  for (var i=0; i<deps.length; i++) {
            deps[i] = modules[deps[i]];

  }//這個循環單獨看簡直一臉懵逼,得結合下面的代碼看,並且其中有執行順序先執行MyModules.define( "bar", [], function() {})函數後執行MyModules.define( "foo", ["bar"], function(bar) {}),當執行第二個函數時對象中modules已經存在一個key爲bar的函數,所以第二個函數才能夠順利的執行。

整體代碼理解一下應該沒問題,因爲是第一次向js源碼發起挑戰,記錄一下。特別不喜歡那種看不懂源碼的感覺,用什麼插件出錯了總要弄半天,不知道從何下手的感覺特別難受。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章