在写正文以前先写一点废话,从我大三下学期正式接触前端到如今,已经六个月了。本身从HTML,CSS,简单的JS验证开始,一点点开始走入前端的世界。愈加的感受前端这一领域散发着无穷的魅力,也许这和我真心喜好前端分不开。有些人总爱说前端技术迭代快,认为这是前端的一个缺点,但我偏偏认为这正是前端的魅力所在,充满着朝气和活力。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。函数