对于闭包的理解,主要有两个作用
1.外部方法应用内部方法的变量,2.缓存数据
function a() { var i = 0; function b() { alert(++i); } return b; } var c = a(); c();//1 c();//2
其中的c是一个window全局方法,它能调用方法a里面的b方法,注意a是返回了一个内部函数b,如果不这样,那c就不能调用b了;
a中有一个变量i,为什么第一次调用c它是1,第二次时2,因为c是一个全局对象,一直保存在内存中
看以下代码
var name = "The Window"; var object = { name : "My Object", getNameFunc : function(){ return function(){ return this.name; }; } }; alert(object.getNameFunc()()); //The Window
为什么弹出的是The window
注意object,它是全局对象,那么this就代表的是window,所以this.name就代表全局变量name了,如果要调用object的name,this.object.name这样调用即可
个人对闭包的看法(对于大神肯定不算啥):
1.会缓存对象,有可能导致性能下降和内存泄露,建议少用;
2.会导致当前上下文错乱。