什么是闭包
2019-07-11 本文已影响0人
阿尔托莉鸭
“函数”和“函数内部能访问到的变量(也叫环境)”的总和,就是一个闭包。
JavaScript有两种作用域:全局作用域和函数作用域。函数内部可以直接读取全局变量。但是,在函数外部无法读取函数内部声明的变量。换言之,如果一个函数,使用了它范围外的变量,那么‘这个函数+这个变量’就叫做闭包。
function f1() {
var n = 1;
function f2() {
console.log(n);
}
return f2;
} //这段代码中,函数 f2 和变量 n 的总和就叫做闭包
闭包的用途:
1.从外部读取函数内部的变量。
function f1() {
var n = 9;
function f2() {
console.log(n);
}
return f2;
}
var result = f1();
result(); // 9
//这段代码中,函数f1的返回值就是函数f2,由于f2可以读取f1的内部变量,所以就可以在外部获得f1的内部变量了。
2.让这些变量始终保持在内存中。
function f1(n) {
return function () {
return n++;
};
}
var a1 = f1(1);
a1() // 1
a1() // 2
a1() // 3
//这段代码中,闭包使得内部变量记住上一次调用时的运算结果。
3.封装对象的私有属性和私有方法。
function f1(n) {
return function () {
return n++;
};
}
var a1 = f1(1);
a1() // 1
a1() // 2
a1() // 3
var a2 = f1(5);
a2() // 5
a2() // 6
a2() // 7
//这段代码中,a1 和 a2 是相互独立的,各自返回自己的私有变量。