javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JS垃圾回收与闭包

JavaScript垃圾回收与闭包举例详解

作者:weixin_45456477

闭包和垃圾回收机制常常作为前端学习开发中的难点,也经常在面试中遇到这样的问题,这篇文章主要介绍了JavaScript垃圾回收与闭包的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

垃圾回收

标记清除

当变量进入环境时,将其标记为“进入环境”。当变量离开环境时,则将其标记为“离开环境”。垃圾回收器会销毁那些带标记的值,并回收它们所占用的内存空间。

function test() {
  var a = 1; // 函数调用时 被标记 进入上下文
}
test(); // 函数执行完毕,a的标记去掉,被回收

引用计数

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

function test() {
  var a = {}; // a的引用次数为0,被回收
  var b = a; // a的引用次数加1,为1
  var c = a; // a的引用次数再加1,为2
  a = 1; // a的引用次数减1,为1
  b = 1; // a的引用次数减1,为0,可以被回收了
  c = 1; // a的引用次数减1,为0,可以被回收了
}

闭包

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。闭包使得函数可以继续访问定义时的词法作用域。

闭包的另一个用处,是封装私有变量。

function createCounter() {
  let count = 0;
  return {
    increment: function () {
      count++;
    },
    getCount: function () {
      return count;
    },
  };
}

const counter = createCounter();
counter.increment();
console.log(counter.getCount()); // 1

闭包的缺点:

闭包的用途

总结 

到此这篇关于JavaScript垃圾回收与闭包的文章就介绍到这了,更多相关JS垃圾回收与闭包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文