什么是闭包?
- 闭包是一个函数,而且存在于另一个函数当中
- 闭包可以访问到父级函数的变量,且该变量不会销毁
原理:
- 利用了作用域链,当前作用域找不到变量,会往上一级寻找,直至最外层,形成了一条链条
作用:
使用:(实现a的自增)
var a = 1 //全局变量a
function add() {
a++
console.log(a);
}
add() //2
add() //3
add() //4
console.log(a); //4 全局变量改变
function add2() {
var a = 1 //函数内部自定义变量
a++
console.log(a);
}
add2() //2
add2() //2
add2() //2
console.log(a); //1 避免了全局污染,但a没有自增
//使用闭包
function add3() {
var a = 1
return function() {
a++
console.log(a);
}
}
var a3 = add3() //a3相当于闭包函数
a3() //2
a3() //3
a3() //4
console.log(a); //1 避免了全局污染,a自增