闭包?封闭的书包?yes!!!

149 阅读2分钟

终极奥秘:啥叫闭包?简单一句话,封闭的书包,这个书包里的东西只有你自己能去拿,别人不能动。

如果理解不了上面的话,就继续往下看:

1.闭包的形成:在函数中嵌套函数并且在内部的函数里使用里外部函数中的变量就形成了闭包

const out = function() {
    var i = 0;
    var inner = function() {
           var j = i;
           return j;
    }
    return inner()
}

上面是顺手写的代码,其实这样就已经实现闭包了,但是这样写没什么意义,就当作是理解的伪代码吧

2.闭包的使用:闭包其实在项目的代码中无处不在,只要在函数所在的词法作用域外的地方,调用内部的函数,都是使用了闭包

3.闭包产生的影响

  • 使得变量一直存在于内存中,垃圾回收机制不会将这个变量回收,一般当开辟一个对应的空间,如果没有引用的话,会将对应的内存空间回收,下面会将一下垃圾回收机制 -在函数外部的地方能访问到函数内部的变量,在es5,阶段是存在函数作用域,通常情况下,外部是无法访问到函数内部的变量的

使用闭包的优缺点:

  • 优点:可以隔离作用域,避免造成全局污染
  • 缺点:由于闭包变量会长期存在内存中,造成内存泄露

总结:对js性能来讲尽量不要使用全局变量和闭包

垃圾收集:找到那些不在继续使用的变量,然后释放其占用的内存

  • 标记清除:垃圾收集器在运行的时候,会给所有的变量都打上标记,然后它会去掉被引用的变量身上的标记,清除还有标记的变量,回收他们所占的内存
  • 引用计数:跟踪记录每个值被应用的次数,如果被其他变量引用一次加+1,如果这个变量重新引用其他值,就减1,当这个值引用次数为0,垃圾收集器会释放这个值所占的内存,有个bug就是对象相互引用,都为2