1. 什么是闭包?
闭包就是能够读取其他函数内部变量的函数。在js 中局部变量可以轻而易举的访问全局变量,但是如果全局变量如果访问局部变量,就不那么容易了
闭包的出现就是为了解决此问题。
闭包初次见面
function f1(){
var n=999;
nAdd=function(){n+=1}
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
nAdd();
result(); // 1000
闭包再次见面
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
alert(this.name);//My Object
return function(){
alert(this);//[object Window]
return this.name;
};
}
};
alert(object.getNameFunc()());// The Window 为什么是The Window
闭包第三次见面
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()())//My Object
见了三次面之后应该看到了闭包也有多变的一面,假如每一次的出现,你都能够认识,那么恭喜你你算是理解闭包的,为什么要使用闭包呢?闭包有哪些好处?
它的最大用处有两个
1.是前面提到的可以读取函数内部的变量。
2.是让这些变量的值始终保持在内存中。也是一个缺点,防止内存泄露。