闭包(closure)就是能够读取其他函数内部变量的函数,延长变量的作用域。
// 闭包1
function creatFunction() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = (function (num) {
return function () {
return num; // 访问上层函数变量num
};
})(i);
}
return result;
}
console.log(creatFunction());// [0,1,2,3,4,5,6,7,8,9]
// 闭包2
function a() { // 闭包:函数a(闭包:被访问的函数)
var i = 0;
function b() {
alert(i); // 0
}
return b;
}
var c = a(); // a返回b 即c=b
c(); //函数调用 即函数b()执行,访问a的局部变量i
闭包特点:
- 闭包携带包含它的函数作用域(闭包携带访问它的函数),占用更多内存。
- 过多使用闭包,占用内存过多。
- 参数和变量不会被回收,并且将值保存在内存中。
- 用途:设置私有变量,在内存中存储一个变量。