# 闭包(Closure)
# 函数作用域
作用域可以理解是一个封闭的空间(可以理解成代码块
)。在Js中,一个函数在执行的时候会在内存中创建一个私有作用域。函数执行完成后,这个私有作用域就会被销毁。
注:“闭包”情况下,因为有对函数内部的引用,所以私有作用域不会自动销毁,需要手动销毁
# 什么是闭包
简单来说,闭包是有权访问另一个函数作用域中变量的函数。
函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。 在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。
# 如何使用闭包
在一个函数中返回有对其作用域的变量引用的函数。
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11