闭包的缺点与解决办法

2022-09-08 17:50:14 浏览数 (2)

我们知道闭包延展了局部变量的生命周期,使得外部操作局部变量成为可能,一般来讲函数在调用执行后函数就会被释放,但如果函数中产生了闭包,就会导致函数执行完毕后,函数内部的局部变量没有被释放,使得占用内存时间会变长,容易造成内存泄漏。

解决办法

1.能不用闭包就不用

2.及时释放

如下例

代码语言:javascript复制
function fn1(){
    var arr = new Array[100000]
        function fn2(){
            console.log(arr.length)
        }
        return fn2
}
var f = fn1()
f()

函数执行后在创建了10万长度的数组存储在内存中,我们在调用后并没有对函数进行手动释放造成了内存的浪费

解决办法

代码语言:javascript复制
var f = fn1()
f()
f = null //让内部函数成为垃圾对象,从而回收闭包 
内存溢出与内存泄漏

内存溢出

1.一种程序运行出现的错误

2.当程序运行需要的内存超出了剩余的内存时,就会报错内存溢出的错误

代码语言:javascript复制
var obj = {}
for (var i = 0 ;i < 10000;i  ){
    obj[i] = new Array(1000000)
        console.log('--')
}
//内存溢出 导致程序崩溃

内存泄漏

1.占用的内存没有被及时释放

2.内存泄漏积累多了就容易导致内存溢出

3.常见的内存泄漏:

3.1意外的全局变量

3.2没有及时清理的计时器或回调函数

3.3闭包

代码语言:javascript复制
//意外的全局变量
function fn(){
    a = 3
    console.log(a)
}
fn()

0 人点赞