【前端红宝书】温故知新 第四章 变量、作用域与内存

74 阅读4分钟

一 通过变量使用原始值与引用值

1.1 原始值与引用值

  • 原始值就是上一章说的那6种(Number、String、Boolean、Null、Undefined、Symbol),保存原始值的变量是按值来访问的,所以我们在操作存储原始值变量时,是直接操作的值。
  • 引用值则是通过原始值组合成的对象。它是保存在内存中的,因为JS不允许直接操作内存,所以我们没办法直接操作引用值也就是对象,但是我们可以操作对象的引用。所以引用值的变量是按照引用来访问的。

1.2 类型判断

  • 原始值一般使用typeof判断,需注意null类型使用typeof得到是object
console.log(typeof 123) //number
console.log(typeof "123") //string
console.log(typeof true) //boolean
console.log(typeof null) //object
console.log(typeof undefined) //undefined
  • 引用值使用instanceof
console.log([] instanceof Array)  //true
console.log({} instanceof Object  //true
class Person {}
const zs = new Person()
console.log(zs instanceof Person) //true

tip:typeof判断函数得到的是function

二 理解执行上下文

这里原文写的对小白来说不太好理解,举个例子便于理解。比如我在一家餐厅里工作,餐厅内的员工都在完成自己的任务。

1. 餐厅环境: 在餐厅中,有很多不同的区域和活动。厨房是烹饪食物的地方,前台是接待客人的地方,餐厅大厅是用餐的地方,等等。每个区域都有自己的功能和规则。

2. 执行上下文: 在 JavaScript 中,执行上下文就像是每个人在餐厅中的工作环境。每当运行 JavaScript 代码时,都会创建一个执行上下文,它决定了代码的执行方式和访问权限。

3. 餐厅员工: 每个执行上下文中都有一些“员工”,也就是变量、函数和其他数据。这些员工会在他们的执行上下文中执行任务,比如计算数字、处理字符串、调用函数等等。

4. 餐厅规则: 在餐厅里,有一些规则和限制,比如厨房里的员工不能进入前台,大厅里的服务员不能进入厨房等等。类似地,在执行上下文中也有一些规则,比如某些变量只能在特定的作用域内访问,函数只能在定义的范围内调用等等。

5. 任务执行: 当你运行 JavaScript 代码时,就像在餐厅中指挥员工一样。你会创建一个执行上下文,并开始执行任务。你可能会调用函数,这就像指挥某个员工去做某个特定的工作。每个任务都在其自己的执行上下文中执行,直到完成为止。

总的来说,执行上下文就像是 JavaScript 代码的工作环境,它包含了代码执行所需的变量、函数和其他数据,以及执行代码的规则和限制。

三 理解垃圾回收

关于垃圾回收机制也可以继续用上面‘餐厅’的例子,垃圾回收机制可以比作餐厅内清洁工回收客人结束用餐时产生的各类垃圾的行为。 1. 餐厅环境: 想象一家繁忙的餐厅,每天都有大量的顾客来用餐。餐厅里有厨房、前台、大厅等不同的区域,每个区域都有各自的功能和任务。

2. 清洁工: 垃圾回收器就像是这家餐厅的清洁工,他们的任务是保持餐厅的整洁和卫生。他们穿着制服,拿着工具,沿着餐厅的各个角落巡视,寻找并清理垃圾。

3. 垃圾和废物: 在餐厅里,顾客用完餐后会产生一些垃圾和废物,比如食物残渣、餐巾纸等。这些垃圾就像是 JavaScript 中不再使用的内存,它们占用着空间,但却不再有用。

4. 清理过程: 清洁工会在餐厅的不同区域进行巡视,收集垃圾,并将其放入垃圾桶中。类似地,垃圾回收器会在 JavaScript 程序的内存中进行扫描,找到不再使用的对象,并将其清理出内存。

5. 提高效率: 通过定期清理垃圾,餐厅可以保持整洁,为顾客提供更好的用餐环境。而通过垃圾回收机制,JavaScript 程序可以释放不再使用的内存,提高系统的效率和性能。