闭包
闭包的概念:
闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境)的引用的组合。换而言之,闭包让开发者可以从内部函数访问外部函数的作用域。在 JavaScript 中,闭包会随着函数的创建而被同时创建。
示例1:
function foo(){
var person = "JO"
function bar(){
console.log(person)
}
}
bar可以访问到外部的person,这种情况就属于闭包。
示例2:
计数器
var count = 0;
function add(){
count += 1;
console.log(count);
}
add(); //1
add(); //2
但是这种情况存在一些不可控因素,上述实例中可以不通过add()改变count的值。
为此我们可以使用闭包来解决这个问题。
function foo(){
var count = 0;
return function (){
count += 1;
console.log(count);
}
}
add = foo();
add(); //1
add(); //2
这样count只能通过add()函数来改变。