什么是闭包,闭包内存泄漏怎么解决?

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版权协议,转载请附上原文出处链接和本声明。