JS-----堆栈内存

247 阅读2分钟

堆内存 存储引用数据类型

堆内存的创建

创建一个对象 数组 函数 等引用数据类型 浏览器就会分配一个堆内存地址 存储引用数据类型的数据

堆内存的销毁

  • 让所有的堆内存空间地址的变量赋值为null 即可
  • 没有变量占用这个堆内存了 浏览器就会在空闲的时候释放掉

栈内存 供JS代码执行的环境 存储 基本数据类型的数据

栈内存的创建

  • 当打开浏览器时 会先开辟一个顶层的栈内存 就是全局作用域
  • 函数在执行时 也会开辟一个工函数代码执行的栈内存 就是私有作用域 函数每执行一次 就会形成一个全新的栈内存 因此函数的执行都是相互独立的

栈内存的销毁

  • 全局栈内存 当页面关闭时才会销毁
  • 函数的私有作用域 一般函数执行完成后 栈内存自动销毁 但是有特殊情况

栈内存不销毁

函数栈内存 正常情况下 函数执行时 会形成一个栈内存 当函数执行完成后 会自动销毁

  • 但是函数执行完成后 当前形成的栈内存中 某些内容被栈内存以外的变量占用 此时栈内存不能被销毁 保存在栈内存中的数据也不会销毁
    • 函数返回值被占用
    function fn(){
    return{
        console.log(1); 
    }
    }
    var b = fn(); //不销毁的栈内存
    
    • 函数内部的引用数据类型被外部占用 函数执行的作用域不销毁
    var a = null;
    function fn(){
        a = {
            b:12
        }
    };
    fn();  //此时a 占用fn作用域中的对象