标签:style blog color io 使用 ar div 问题 cti
1.闭包可以避免全局污染
2.闭包可以将需要的值长期驻扎在内存中以供使用
3.可以提供私有成员
以下是简单闭包例子
function aa(){ var a = 1; return function(){ a++; alert(a); }; } var b =aa(); b();//输出2 b();//输出3
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window
getNameFunc : function(){
return this.name;
} //此时的话返回的是“My Object”
我的理解:首先,匿名函数的执行环境具有全局性,因此this对象通常指向window,此处创建了一个object,object内创建了一个getNameFunc方法,这个方法返回一个匿名函数,这个匿名函数返回this.name,this返回的是当前作用域的活动对象,即是getNameFunc的this返回的object,而里面的function的this是不可能访问到上一层的this对象的,除非将外部作用域中的对象保存在一个闭包能访问到的变量中,就能让闭包访问到这个对象。所以这个时候内部的function返回的this.name中的this由于获取不到上一层的function的作用域,所以默认的匿名函数执行环境具有全局性的原因,这个this指的就是window,因此输出的就会是“The window”。
如果要让这个闭包访问到object的name,可以将getNameFunc的执行作用域的this保存一下给里面的闭包访问:
getNameFunc:function(){ var that = this; return function(){ return that.name; } }
标签:style blog color io 使用 ar div 问题 cti
原文地址:http://www.cnblogs.com/SLEBEE/p/3959587.html