内存管理是指在声明一个变量时,我们为它分配一块内存空间,当不在需要时,将这块内存释放。在JS中开发者不需要手动进行内存管理,JS引擎会自动进行内存管理。
一、内存分配
当我声明变量时,我们要根据变量的数据类型进行内存分配。数据类型分为基本数据类型和引用数据类型。👇下面是一个简单的区别图解
基本类型:系统会为分配一块内存(栈),这块内存中保存的就是变量的内容。【String,Number,Boolean,Null,Undefined,Symbol】
引用类型:其存储的只是一个地址而已(栈),这个地址指向的内存块(堆)才是是变量的真正内容。【Object,Array,Function】
🪐:这里只简述一下数据类型在内存中的保存方式,其他关于数据类型的相关内容就不细说了。
二、内存释放(垃圾回收机制)
内存释放,即垃圾回收机制。当变量不再需要时,JS引擎把变量占用的内存回收。我们就需要知道如何判断变量不再需要。JavaScript 中有全局对象,浏览器中的全局对象是window
,垃圾回收机制时从全局对象开始。
有一个官方解释叫可达性,我可太讨厌用概念来解释概念了。直接上图👇根据内存图,我们可以把可达性理解成“无法到达的岛屿🏝”
内存状态图解
情况一:
let user = {name: 'John'}; // 一个对象 {name:”John”}(称之为对象A)被创建,全局变量 “user” 引用了对象A
user = null; // 如果user被覆盖,这个引用就没了
// 现在 对象A 变成不可达的了。因为没有引用了,就不能访问到它了。垃圾回收器会认为它是垃圾数据,然后释放内存。