• js学习之堆栈内存


    **栈内存**

      >基本数据类型值是直接存放在栈内存中的

      栈内存中的变量一般都是已知大小或者有范围上限的,算作一种简单存储。而堆内存存储的对象类型数据对于大小这方面,一般都是未知的。个人认为,这也是为什么null作为一个object类型的变量却存储在栈内存中的原因。


    栈内存释放
      一般情况下,函数执行形成的栈内存,函数执行完,浏览器会把形成的栈内存自动释放。
      有时候函数执行完成,栈内存无法释放(被外部占用了)。
      全局作用域在加载页面时形成,在关闭页面时销毁(window)。

      全局作用域会在页面关闭或者刷新的时候释放。(栈内存释放后,存储在栈内存中的值也都会销毁。)
      私有作用域:一般情况下,当函数执行完成,所形成的私有作用域(栈内存)都会自动释放掉,但是也有特殊的情况。

      函数执行完成,当前形成的栈内存中,某些内容被栈内存意外的变量一直占用,此时栈内存不能释放,栈内存中存储的基本值也不会被释放,一直保存下来。最典型的就是闭包。


    **堆内存**


      > 存储引用数据类型值的


      堆内存利用空对象指针null来释放空间。
        var obj = {};此时当前对象对应的堆内存被变量obj占用,无法销毁空间。
        obj = null;由于null是空对象指针(不指向任何的堆内存),此时上一次的堆内存就没有被占用了,谷歌浏览器会在空闲时间把没有被占用的堆内存自动释放(销毁/回收)。

  • 相关阅读:
    正在与拖延症病魔抗争中
    Words For Today [20110724]
    短期目标[Till 20110805]
    Words For Today [20110804]
    Words For Today [20110731]
    Words For Today [20110801]
    Words For Today [20110723]
    《定位》一书
    马云的最近的话柱着拐杖跳高
    创业的人格
  • 原文地址:https://www.cnblogs.com/zjz666/p/11338277.html
Copyright © 2020-2023  润新知