1. 首先,咱們須要明白爲何要用模塊化?html
1 function f1(){ 2 //函數體 3 } 4 function f2(){ 5 //函數體 6 }
1 // 將基本的方法封裝起來 2 var musicPlayer = { 3 4 var musicDom = null, //播放器對象 5 var musicList = [], //存放歌曲列表 6 7 // 初始化音樂播放器 8 var init = function(){ 9 10 }, 11 12 // 添加一首歌曲 13 var add = function(src){ 14 15 }, 16 17 // 根據數組下標決定播放哪一首,索引index從0開始 18 var play = function(index){ 19 20 }, 21 22 // 暫停播放 23 var stop = function(){ 24 25 }, 26 27 // 下一首 28 var next = function(){ 29 30 }, 31 32 // 上一首 33 var prev = function(){ 34 35 } 36 };
1 // 建立一個當即執行的匿名函數 2 // 該函數返回一個對象,包含你要暴露的屬性 3 // 以下代碼若是不使用當即執行函數,就會多一個屬性i 4 // 若是有了屬性i,咱們就能調用counter.i改變i的值 5 // 對咱們來講這種不肯定的因素越少越好 6 7 var counter = (function(){ 8 var i = 0; 9 10 return { 11 get: function(){ 12 return i; 13 }, 14 set: function( val ){ 15 i = val; 16 }, 17 increment: function() { 18 return ++i; 19 } 20 }; 21 }()); 22 23 // counter實際上是一個對象 24 25 counter.get(); // 0 26 counter.set( 3 ); 27 counter.increment(); // 4 28 counter.increment(); // 5 29 30 counter.i; // undefined i並非counter的屬性 31 i; // ReferenceError: i is not defined (函數內部的是局部變量)
從以上的代碼能夠看出,counter中其中並無i這個屬性,它只有return 中暴露出來的內容。這樣咱們就對i實現了私有。數組
1 var module1 = (function (mod){ 2 mod.m3 = function () { 3 //... 4 }; 5 return mod; 6 })(module1);
在這個例子中,就給module1添加了一個新的方法m3並返回。模塊化
1 var module1 = ( function (mod){ 2 //... 3 return mod; 4 })(window.module1 || {});
IIFE傳入的參數:若是window.module1有定義,就傳入該參數,若是爲undefined就傳入一個空對象。函數
1 var module1 = (function ($, YAHOO) { 2 //... 3 })(jQuery, YAHOO);
如上所示的代碼將jQuery和YUI兩個庫的全局變量看成參數傳入了module1。spa