什么是闭包?简单来说就是,有一个外层函数a,并且函数a中还有个内层函数b,函数a中有个定义变量aa,这个变量aa按理来说应该在函数a执行完,就会被内存销毁,但是在函数a中的函数b,不仅用到了外层函数中的变量aa,而且还return了aa,把变量aa返回到了一个全局的状态下,这就叫做闭包
function a(){
var aa='i am a';
return function(){
return aa;
}
}
var A=a(); // 此时A就是方法a的return 也就是 function(){return aa;} ,自行体会一下
console.log(A()); // i am a
那么有人就要问了,这么闭包有什么好处,感觉花里胡哨的还麻烦,为什么要返回值不直接return 回去?
所以下面就要说闭包的优点了:
1.闭包可以读取函数的内部变量,这个不用我说都知道,这样可以保护私有的变量,你想要展现出的可以访问到的变量就放到return里的函数中,这样函数内部的变量只能通过return 里的函数才能访问到,提高了安全性
2.闭包可以保存内部变量在内存中,而不让垃圾处理机制给清空,代码如下
function a() {
var aa =1;
return function (){
aa++; //对aa进行加法运算
return aa;
}
}
var A=a();
console.log(A()); //运行了一次,打印出aa为2
console.log(A()); // 再次运行,打印出aa为3
由上述代码可见,在第一次运行A时,对内部的aa进行加法运算后,aa变量进行了保存并没有销毁,所以在第二次打印A()的时候才能打印出3。