JavaScript 中 的闭包问题
闭包函数:能够访问其他函数内部变量的函数; 简单理解:声明在一个函数中的函数,叫做闭包函数;
闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回(寿命终结)了之后。
闭包的特点:
- 让外部访问函数内部变量成为可能
- 局部变量会常驻内存中
- 可以避免使用全局变量,防止全局变量污染
- 会造成内存泄露(有一块内存被长期占用,得不到释放)
例如:
function myFun(){
var num = 0;
function getNum(){
num++;
console.log(num);
}
return getNum;
}
var getNum1= myFun(); //每次外部函数执行的时候,外部函数的地址不同,都会重新创建一个新的地址
getNum1(); // 1
getNum1(); // 2
getNum1(); // 3
var getNum2 = myFun();
getNum2(); // 1
getNum2(); // 2
getNum2(); // 3
// getNum 函数常驻内存,并且 myFun 的变量也没有被销毁,可以被外部访问
为了更好的理解闭包,附上一个神奇的链接:学习Javascript闭包--阮一峰