闭包、垃圾回收机制

一、闭包

定义:有权访问另一个函数作用域中变量的函数,就是闭包,创建方法:使用匿名函数返回此变量值。

特性:函数内嵌套了一个函数、可以引用外层函数的参数及变量、闭包中的参数和变量(常驻内存)无法被垃圾回收机制回收。

优点:使用闭包就是为了私有化变量和方法,可以实现封装和缓存,避免全局变量的污染。

缺点:闭包会常驻内存,增大内存使用量,使用不当会造成内存泄漏。

使用场景:

1.解决var的变量提升问题,使用匿名函数返回参数,使得定时器setTimeout正确输出循环的值

for(var i=0;i<5;i++){

(function(j){

setTimeout(()=>{

 console.log(j)

},j*1000)

})(i)

}

2.函数防抖,timer

3.封装私有化变量和方法

4.作为回调,定义行为后,将其关联到某个事件上。

 

二、垃圾回收机制

定义:垃圾回收机制是为了防止内存泄漏,它会间歇的不定期的寻找不再使用的变量,并释放掉此变量所占用的内存。

变量的生命周期:变量有两种,全局变量与局部变量,局部变量的生命周期在函数执行完毕后就被释放了,即垃圾回收。全局变量的生命周期则会持续到浏览器页面关闭。

回收方法:

  标记清除:机制为:在函数声明变量时标记为进入环境,函数执行完毕后标记为离开环境,离开环境后内存中还剩下的变量就是需要回收的变量。大部分浏览器采用这个方式进行垃圾回收。

  引用计数:机制为:跟踪一个值的引用次数,当声明一个变量并将一个引用类型赋值给该变量时,值的引用次数+1,当这个变量指向其他值时,值的引用次数-1,当引用次数为0时将其回收。由于这个方法无法解决循环引用的问题,会造成内存泄漏。

posted @ 2022-12-19 23:59  新时代的搬砖人  阅读(294)  评论(0)    收藏  举报