0


【入门必看】通俗易懂带你理解js闭包及优缺点(垃圾回收)

一、概念理解

1、闭包概念:有权访问另一个函数作用域中变量的函数。
也就是保存自己私有的变量,通过提供的接口(方法)给外部使用,但外部不能直接访问该变量。
可以简单理解为:一个作用域可以访问另外一个函数内部的局部变量
看上图可以理解为子函数可以访问到父函数的一个局部变量,而父函数访问不到子函数的变量。
并且所谓闭包
我们的写法不就是函数里面再套个函数嘛~

一般来说,闭包需要满足三个条件:
【1】访问所在作用域;【2】函数嵌套;【3】在所在作用域外被调用

function dad(){
    var num = 10;
    function son(){
        console.log(num)//可以访问到dad函数的局部变量num
    }
    son() 
}
dad()

在这里我们要更好的理解闭包,还需要简单理解个js垃圾回收机制的知识点~

2、js垃圾回收机制(补充)

简单的说,当一个函数被执行完后,其作用域会被收回,如果形成了闭包,执行完后其作用域就不会被收回。

垃圾回收的核心思路:清理调内存中不在被引用的值。

通俗的讲,就是把内存中没用的值,都清理掉!
那我们怎么判断它就没有用了呢?
①对于局部变量,那么它在函数调用完之后,就没用了(你都调用完啦,那要你有什么用呢!)
②对于全局变量,在浏览器把页面卸载掉的时候消失,阿~都要卸载页面了,这个过程肯定会消耗比较大,所以会按照固定时间,也就是周期性的进行回收。

javascript 中常见的垃圾回收方式:标记清除(常用)、引用计数两种方式

二、闭包的优缺点

1、优点
①可以把局部变量长期驻留在内存中(可以理解为优点②的原因)
**②在某些方面提升代码的执行效率 **【注意!一旦过头就会转换成缺点】
(举个栗子假如我在院子里养了一群兔子,我把其中几只放在我家里,这样我喂它们多方便呐可以提高我的喂养效率,但一旦把兔子过多的放家里养,那岂不是乱套了!占用我的空间,反而会降低我的喂养效率,降低我的性能!)
③可以避免全局变量对命名空间的污染
④可以从一个域中取出原本访问不到的变量去使用

2、缺点
①由于闭包里作用域返回的局部变量资源不会被立即销毁回收,所以可能会占用更多的内存
过度使用闭包会导致性能下降,建议在非常有必要的时候才使用闭包

欢迎各位大佬指正,Thanks♪(・ω・)ノ


本文转载自: https://blog.csdn.net/m0_71981318/article/details/125293107
版权归原作者 笛子兔 所有, 如有侵权,请联系我们删除。

“【入门必看】通俗易懂带你理解js闭包及优缺点(垃圾回收)”的评论:

还没有评论