title: closure slug: higher-order function categories: [JavaScript, closure]
函数和对其周围状态(lexical environment,词法环境)的引用捆绑在一起构成闭包(closure)。也就是说,闭包可以让你从内部函数访问外部函数作用域。在 JavaScript 中,每当函数被创建,就会在函数生成时生成闭包。
参考:MDN
比如我们定义一个计数器,正常的写法
var count = 0;
function add() {
return count += 1;
}
add(); // 1
add(); // 2
这样没问题,可以正常实现功能,也很简单方便。但是如果我们要同时实现多个计数器呢,总不能
var count = 0;
function add() {
return count += 1;
}
var count1 = 0;
function add1() {
return count += 1;
}
var count2 = 0;
function add2() {
return count += 1;
}
...
这样一直写吧, 所以这时候就可以使用闭包来实现
function add() {
var count = 0;
return function() {
return count += 1;
}
}
var fn1 = add(); // 计数器1
var fn2 = add(); // 计数器2
fn1(); // 1
fn1(); // 2
fn1(); // 3
fn2(); // 1
fn2(); // 2
fn2(); // 3