闭包之我的理解
讲闭包之前先要弄明白一件事件, 函数的作用域是在函数声明的就确定了的.子级函数可以访问到父级函数的作用域,而父级不能访问到子级的作用域,这就是作用域链
闭包就是 在函数A内部再声明一个函数B,然后函数B就可以访问到函数A中的变量,然后在A中把B返回赋给一个全局变量,这个全局变量就可以访问到A的变量了.
Function A(){
Var a=100;
Function B(){
Return a;
}
Return B;
}
Var C=A();
//相当于var C=function B(){
Return a;
}
这时候 C是全局的 , 全局没有a,所以这个B中的a 应该是undefined的才对
但是由于闭包,即 函数B在声明的时候作用域已经确定在A的里面,所以最后 a=100
alert(C()); //100
闭包的两个作用:
// 1. 私有化数据
因为现在函数A里面的数据只有通过函数B才能访问到
// 2. 数据保持
闭包的数据会一直保持,不会被回收