美文网首页
js闭包变量回收问题

js闭包变量回收问题

作者: 小本YuDL | 来源:发表于2019-10-13 22:33 被阅读0次

js变量回收规则:

  • 在js中定义的全局变量是不会被销毁的,因为随时都可能会用到这个变量,所以不能被销毁。
  • 具体引用关系的不会被销毁
    • 如果一个对象不被引用,那么这个对象就会被回收;
    • 如果两个对象互相引用,但是没有被第3个对象所引用,那么这两个互相引用的对象也会被回收。
      通过下面两段代码进行对比分析:
function a(){
  var b= 10;
  return function(){
    b++;
    console.log(num);
  }
}
a()(); //11
a()(); //11

分析:
在函数a中返回了一个匿名函数,在这个匿名函数中我们num++了一下,然后在函数外面执行了这个匿名函数函数,现在num是11,然后又执行了一次这个函数,你们应该是12吧,为什么不是呢?
原因:
js为了让没有必要的变量保存在内存中,(我们写的任何变量都是需要内存空间的)在不需要这个变量的时候它就会被销毁。所以每次执行一遍 a()() 则变量b就会被销毁。下次再执行,就会重新声明变量b,所以两次输出都是11。

function a(){
    var b = 0;
    return function(){
        b ++;
        console.log(b);
    }
}
var d = a();
d();//1
d();//2

原因分析:

  • 函数a 被 变量d 引用,更准确的说是 函数a 里面的 匿名函数 被变量d所引用。
  • 因为变量d 保存的是函数a执行完成后的值,而函数a执行完,返回了那个匿名函数,所以变量d等于匿名函数。
    -匿名函数因为使用了 函数a 中的 变量b 并且还被 变量 d所引用,所以就形成了一个闭包。
  • 只要这个变量d不等于null的话,那么那个变量b会一直保存到变量d中不会被销毁。
  • 所以两次执行的结果不一样

参考:[https://blog.csdn.net/hansexploration/article/details/81068880]

相关文章

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

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

  • JavaScript闭包

    js闭包 闭包的三大特点为: 1、函数嵌套函数 2、内部函数可以访问外部函数的变量 3、参数和变量不会被回收。 闭...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数 2、内部函数可以访问外部函数的变量 3、参数和变量不会被回收。 闭...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • js 闭包 字符串 定时器

    js闭包 闭包的三大特点为: 1、函数嵌套函数2、内部函数可以访问外部函数的变量3、参数和变量不会被回收。闭包的作...

  • js闭包变量回收问题

    js变量回收规则: 在js中定义的全局变量是不会被销毁的,因为随时都可能会用到这个变量,所以不能被销毁。 具体引用...

  • JS闭包问题(二)

    在之前的JS闭包问题(一)文章中大概介绍了一下JS闭包,同时讲了闭包与变量之间的问题,今天我们继续聊闭包,聊聊闭包...

  • 由闭包引出的垃圾回收

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

  • Javascript 学习(闭包)

    js闭包 js中的闭包问题是由函数变量的作用域引出的,全局变量和局部变量的概念和Java感觉没有太大的区别,但是如...

  • 谈一下对闭包的理解

    一、什么是闭包 闭包是通过改变JS回收机制保留某段作用域的一种手段。当一个函数执行完毕后,里面的局部变量是会被JS...

网友评论

      本文标题:js闭包变量回收问题

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