1、什么是闭包?
闭包就是一个函数,能够访问其他函数内部变量的函数,保护变量不被内存回收机制回收,避免全局变量被污染。
闭包示例代码:
function foo(){
var i=0;
return function(){ //这个就是一个闭包函数
console.log(i++); //变量不会被内存回收机制回收
}
}
var f1=foo(),
f2=foo();
f1(); // 0
f1(); // 1
f2(); // 0

闭包的缺点
闭包长期占用内存,内存消耗很大,可能导致内存泄露
2、闭包内存泄漏怎么解决?
1,在退出函数之前,将使变量赋值为null;
function foo(){
var i=0;
return function(){ //这个就是一个闭包函数
console.log(i++); //变量不会被内存回收机制回收
i=null; //释放内存
}
}
var f1=foo(),
f2=foo();
f1(); // 0
f1(); // 0
f2(); // 0

eg:怎么将下面的代码实现: 每隔一秒打印数组一个元素,1秒打印1,2秒打印2,3秒打印3
(function(){
var array = [1, 2, 3];
for(var i = 0; i < array.length; i++){
console.log(i)
setTimeout(function(){
console.log(array[i]);
}, i * 1000);
}
})();
运行结果:

//完善代码
(function(){
var array = [1, 2, 3];
for(var i = 0; i < array.length; i++){
console.log(i)
var j=0;
setTimeout(function(){ //这就是一个闭包函数
console.log(array[j]);
j++;
}, i * 1000);
}
})();
运行结果:


版权声明:本文为weixin_44880730原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。