堆内存 存储引用数据类型
堆内存的创建
创建一个对象 数组 函数 等引用数据类型 浏览器就会分配一个堆内存地址 存储引用数据类型的数据
堆内存的销毁
- 让所有的堆内存空间地址的变量赋值为null 即可
- 没有变量占用这个堆内存了 浏览器就会在空闲的时候释放掉
栈内存 供JS代码执行的环境 存储 基本数据类型的数据
栈内存的创建
- 当打开浏览器时 会先开辟一个顶层的栈内存 就是全局作用域
- 函数在执行时 也会开辟一个工函数代码执行的栈内存 就是私有作用域 函数每执行一次 就会形成一个全新的栈内存 因此函数的执行都是相互独立的
栈内存的销毁
- 全局栈内存 当页面关闭时才会销毁
- 函数的私有作用域 一般函数执行完成后 栈内存自动销毁 但是有特殊情况
栈内存不销毁
函数栈内存 正常情况下 函数执行时 会形成一个栈内存 当函数执行完成后 会自动销毁
- 但是函数执行完成后 当前形成的栈内存中 某些内容被栈内存以外的变量占用 此时栈内存不能被销毁 保存在栈内存中的数据也不会销毁
- 函数返回值被占用
function fn(){ return{ console.log(1); } } var b = fn(); //不销毁的栈内存
- 函数内部的引用数据类型被外部占用 函数执行的作用域不销毁
var a = null; function fn(){ a = { b:12 } }; fn(); //此时a 占用fn作用域中的对象