闭包就是函数嵌套函数,函数内部可以访问外部的变量,
函数内部如果访问外部的变量,则外部的变量不会被垃圾回收机制所回收。
我们来看两个小例子
var arr=[];
for(var i=0;i<5;i++){
//数组里面push一个函数
arr.push(function(){
console.log(i)
//拿到的是全局变量i
})
}
//console.log(arr)
//打印结果是五个函数
// console.log(arr[0])
// console.log(arr[1])
// console.log(arr[2])
//打印结果都是
// f(){
// console.log(i)
// }
arr[1]();//5
arr[2]();//5
arr[3();//5
arr[4]();//5
解决方法
var arr=[];
for(var i=0;i<5;i++){
//声明五个匿名函数
(function(i){
//相当于 var i=0 1 2 3 4
arr.push(function(){
console.log(i);
})
})(i)
}
arr[1]();//1
arr[2]();//2
arr[3]();//3
arr[4]();//4