美文网首页
JS中闭包以及垃圾回收机制

JS中闭包以及垃圾回收机制

作者: Gino_Li | 来源:发表于2019-03-04 20:14 被阅读0次

闭包

闭包是指一个函数可以访问另一个函数中的变量。

常见的形式:函数里嵌套函数。

缺点:大量使用闭包会造成内存泄漏。(内存泄漏:指有大量变量不能得到及时释放)

            //点击自增案例
            var span = document.querySelectorAll('.test span');
            var btns = document.querySelectorAll('.test button');
            function add(){
                for(var i=0;i<btns.length;i++){
                    (function(k){
                        btns[k].addEventListener('click',function(){
                            var res = Number(span[k].innerText);
                            span[k].innerText=res+1;
                        })
                    })(i)
                }
            }
            add();

闭包里的变量k一直被点击事件里面的函数所引用,因此JS一直不能确定变量k什么时候不再需要引用,因此,所以k的内存一直不能释放,造成内存泄漏。

这里涉及到JS垃圾回收机制的原理,下面简单介绍一下。

垃圾回收机制

常见的垃圾垃圾回收机制有2种:
1.标记清除(现在的浏览器都是用这种方式)
2.引用计数(了解)

注意:开发过程中发现不再需要引用的对象把这个对象赋值为null。

标记清除

1.首先给所有的变量或者对象添加一个标记
2.当变量进入环境(引用变量)的时候,把上一步标记的内容清除
3.当变量离开环境(不再需要引用变量)的时候,再重新给这些变量添加标记
4.这些重新添加上标记的变量或对象会回收到垃圾回收机器里面
5.js会周期性的清除这些垃圾回收机器里面的所有对象或属性。

引用计数

当声明了一个变量并将一个引用类型值赋值该变量时,则这个值的引用次数就是1.如果同一个值又被赋给另外一个变量,则该值得引用次数加1。相反,如果包含对这个值引用的变量又取 得了另外一个值,则这个值的引用次数减 1。当这个值的引用次数变成 0时,则说明没有办法再访问这个值了,因而就可以将其占用的内存空间回收回来。这样,当垃圾收集器下次再运行时,它就会释放那 些引用次数为零的值所占用的内存。

相关文章

  • JS中闭包以及垃圾回收机制

    闭包 闭包是指一个函数可以访问另一个函数中的变量。 常见的形式:函数里嵌套函数。 缺点:大量使用闭包会造成内存泄漏...

  • 闭包的理解。

    js的垃圾回收机制 当一个函数执行完,js引擎会回收不再使用的内存,闭包通过这个作用域的引用,阻止了垃圾回收。 什...

  • JS-高级-05(闭包.单线程问题...)

    闭包 从内存角度分析闭包 闭包的问题 JS垃圾回收机制: 创建对象obj,也就是说,变量obj是对新创建对象的引用...

  • 由闭包引出的垃圾回收

    由闭包引出的垃圾回收 闭包的特性 函数嵌套函数 函数内部可以引用外部的参数和变量 参数和变量不会被垃圾回收机制回收...

  • 深入理解闭包(六)——闭包

    原文地址:深入理解闭包(六)——闭包 终于讲到闭包了,这一路走来不容易。从前面的博文中我们知道,js的垃圾回收机制...

  • Javascript垃圾回收机制

    简介 JS自带一套内存管理引擎,负责创建对象、销毁对象,以及垃圾回收。这期探讨一下垃圾回收机制。垃圾回收机制主要是...

  • 闭包及JS垃圾回收机制

    一、什么是闭包? 如果这个函数能够访问其他函数作用域中的变量,那么这个函数就叫做闭包。 换句话说,只要在一个函数中...

  • JS 垃圾回收机制

    从下面这几个方面简单介绍:JS 垃圾回收机制,几种?weakMap, WeakSet JS 垃圾回收机制, 标记清...

  • javaScript闭包

    闭包的特性: 1.函数嵌套函数2.函数内部可以引用外部的参数和变量3.参数和变量不会被垃圾回收机制回收 闭包的定义...

  • js基础7(垃圾回收机制、闭包)

    1、js的垃圾回收机制 浏览器自己做的 全局作用域声明的一个变量不会被回收,只有关闭浏览器才会回收 在局部作用域里...

网友评论

      本文标题:JS中闭包以及垃圾回收机制

      本文链接:https://www.haomeiwen.com/subject/gntwuqtx.html