自调用匿名函数和js的Module模式

编写自调用匿名函数的结构一般如下:

;(function( window, undefined ) {
    // your code
})(window);

传入的参数window,和参数列表中的undefined怎么解释?

1、传入的参数window

  把全局的Window对象传进去,把全局的变量变成局部变量,避免了函数里面执行时候,不需要将作用域链退到顶层作用域,到外面去寻找window,可以提高效率。假如函数里面用到很对window的对象,这样函数要不停的去外面寻找。

还有一点,在压缩代码的时候,window作为参数可以压缩成一些标识符。

 

2、参数列表中的undefined

在匿名函数的作用域内,确保undefined是真的未定义。

就算外面undefined被定义了,也不会影响函数内部的。这就最大程度防止外界的变量定义对所做封装的内部造成影响。

 

3、其他 

$(function(){

  //your code

})

就是页面加载好之后执行的函数,是$(document).ready(function(){})的简写。

 

4、Module模式

特点:

  1、模块化,可重用
  2、封装了变量和function,和全局的命名空间不接触,松耦合
  3、只暴露可用public的方法,其它私有方法全部隐藏

// 创建一个立即调用的匿名函数表达式
// return一个对象,对象中你要暴露的东西
// 返回这个变量将赋值给counter

var counter = (function(){
	var i = 10;

	return {
		get:function(){
			return i;
		},
		set:function(val){
			i = val;
		},
		increment:function(){
			return ++i;
		}
	}

}())

console.log(counter.get());  //10
counter.set(100);
console.log(counter.increment()) //101

  

 

posted @ 2017-03-23 10:48  leaf+  阅读(624)  评论(0编辑  收藏  举报