<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 内存 --- 自动回收 -- 内存泄露 --- 创建使用销毁
// 没有代码, 纯理论,先听懂,在自己说,最后给面试官 ---- 被问的概念 40%
// 80 小胖子 前天面试 就有这个题目 没有答出了
// 垃圾回收机制
// 1. 什么是垃圾? 不再使用的内存
// 2. 什么是垃圾回收机制?
// 一个程序不再使用的内存,被js引擎‘自动回收’; 如果不能自动回收,就叫‘内存泄露’
// 内存的生命周期 --- 创建,使用,销毁
// 内存的创建 (声明一个变量,对象,函数)--- 都会在内存上开辟一个空间
// 内存的使用 对于变量的一些操作,累加求和,获取dom元素,并修改属性等等
// 内存的回收 不在使用的变量,会被js引擎自动回收 (全局变量是关闭页面才会销毁,
// 函数里面的变量,在函数调用完毕以后,自动销毁)
const a = 10 // 背后机制: 在内存里面给我们的变量开辟了一个空间(内存),来储存这个变量
function fn() {
const a = 100;
}
fn() // 一个函数调用完以后,内部的变量就会被自动销毁
console.log(a);
</script>
</body>
</html>
垃圾回收机制的算法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 6000 8000 10000 12000 ---- T4 T5 T6 T7 T8
// 不在使用的内存,被js自动回收
// 面试的回答: 垃圾回收机制: 有两个算法: 引用计数法 + 标记清除法
// 1. 引用计数法: 一个值不在被引用(引用次数为0),那么这个值就会被清除,内存就会被自动回收
// 2. 标记清除法
// 为什么还会出现第二种计数法: 因为 引用计数法 有一些问题 (循环引用的问题)
// 地址 和 值
// 杨坤 t f
// 刘辉 t
// == 比较的值 (简单数据类型,就是比较的值;复杂数据类型,比较的是地址(值))
// === 比较的值和类型
const o1 = {} // 在内存开辟一个新空间,就有一个新地址 0x111111
const o2 = {} // 在内存开辟一个新空间,就有一个新地址 0x222222
console.log(o1 == o2); // 复杂数据类型, (值??)比较的就是地址
console.log(o1 === o2);
</script>
</body>
</html>