美文网首页
JavaScript 堆栈内存及内存释放

JavaScript 堆栈内存及内存释放

作者: 阿畅_ | 来源:发表于2020-05-28 00:28 被阅读0次

堆内存

  • 对象数据类型或者函数数据类型的定义的时候首先都会开辟一个堆内存。堆内存有一个引用地址,如果外面有变量引入这个地址,就可以理解为这个地址被占用了,不能销毁。

堆内存销毁/释放

  • 只需要把所有引入它的变量值,赋值为 null 即可,如果当前的堆内存没有任何东西被占用了,那么浏览器会在空闲的时候把它销毁

栈内存销毁

  1. 全局作用域: 只有当页面关闭的时候,全局作用域才会销毁
  2. 私有作用域: 只有函数执行的时候才会产生私有作用域,一般情况下,函数执行会形成一个新的私有作用域,当私有作用域的代码执行完成后,当前私有所用于会主动的进行释放和销毁。

私有所用于常见的不销毁机制

  1. 函数执行返回一个引用数据类型的值,并且在函数的外面被一个变量或其它的方式接受了,这种情况下,一般形成的私有作用域都不会销毁
function fn() {
    var num = 100
    return function() {}
}
var f = fn() // fn执行形成的这个私有作用域就不会销毁
  1. 在一个私有的作用域中,给 DOM 元素绑定元素方法,一般情况下私有作用域都不会销毁。
  • 通过DOM 方法获取的元素或者元素集合都是对象数据类型的值。
  var oDiv = document.getElementById('div')
(function() {
    oDiv.onclick = function() {}
})() // 当前自执行函数执行形成的私有作用域也不会销毁
  1. 还有一个种是不立即销毁
    • 例如
  function fn() {
      var num = 100
      return function() {
          return num
      }
  }
  fn()() 
// 首先会执行 fn 函数,返回一个小函数对应的内存地址,然后让返回的小函数执行
  • 上面 fn 返回的函数没有被其它东西占用,但是还需要在执行一次,所有暂时不销毁,当返回的值执行完成后,浏览器会在空闲时间把它销毁,这可以理解为不立即销毁

相关文章

  • JavaScript 堆栈内存及内存释放

    堆内存 对象数据类型或者函数数据类型的定义的时候首先都会开辟一个堆内存。堆内存有一个引用地址,如果外面有变量引入这...

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • iOS 关于堆栈

    iOS 关于堆栈 1. 堆栈定义低位地址的 内存块。 (执行速度最快, 先进后出, 大小比堆小,不需要手动释放内存...

  • js知识版图-数据类型

    一、js中内存分为栈内存、堆内存此处引申知识点:js中堆栈内存及函数处理机制 栈内存 从数据类型角度思考 栈内存 ...

  • 堆内存和栈内存的区别

    基于c或c++的堆栈,操作系统为linux 堆内存和栈内存都是位于主存上的内存,为什么堆内存需要开发者申请、释放内...

  • JavaScript 性能优化

    垃圾回收 内存管理 JavaScript 没有提供操作内存的 API,一切内存操作都是自动的。 申请 使用 释放 ...

  • C&C++内存检查工具

    Valgrind(memcheck) valgrind通过监控进程的所有内存申请、释放及内存边界,能够有效发现内存...

  • iOS开发堆栈你理解多少?

    浅谈堆栈理解 Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release...

  • js之垃圾回收与内存泄露

    JavaScript会在创建变量(对象,字符串等)时分配内存,并且在不再使用它们时“自动”释放内存,这个自动释放内...

  • JS 堆栈内存

    堆栈内存的作用 JS 中的内存堆内存和栈内存,所有堆栈内存的处理,浏览器会自行在内部执行 栈内存: 提供一个供 J...

网友评论

      本文标题:JavaScript 堆栈内存及内存释放

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