JavaScript高级程序设计(第四版) 第四章 变量、作用域与内存

本文深入探讨了JavaScript中变量的两种存储方式:原始值与引用值的区别及存储位置。讲解了这些值如何在栈内存和堆内存中分配,并讨论了执行上下文、作用域链以及垃圾回收机制的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习记录

课程名称

变量、作用域与内存

时间

2021-3-9

话题&关键词

作用域、内存、执行上下文、垃圾回收机制

笔记

javascript变量可以保存两种类型的值:原始值和引用值。

原始值可以是:undefined、null、boolean、string、symbol、number中的任意一种,保存在栈内存中。

引用值可以是:array、object、Map、Set等类型中任意一种,保存在堆内存中,变量只存储指向对应堆内存内容的指针。

总结

原始值和引用值有以下特点:

1、原始值大小固定,因此保存在栈内存上。

2、从一个变量到另一个变量复制原始值会创建该值的第二个副本。

3、引用值是对象,存储在堆内存上。

4、包含引用值的变量实际上只包含指向相应对象的一个指针,而不是对象本身。

5、从一个变量到另一个变量赋值引用值只会复制指针,结果是这两个变量都指向同一个对象

6、typeof用来确定原始值,instanceof用来确定引用值

7、执行上下文分为:全局上下文、函数上下文、块级上下文

8、代码执行流每进入一个新上下文,都会创建一条作用域链,用于搜索变量和函数。

9、变量的执行上下文用于确定什么时候释放内存。

10、垃圾回收机制总结如下:

        1. 离开作用域的值会被自动标记为可回收,然后在垃圾回收过程中被删除。

        2. 主流的垃圾回收算法标记清理,即先给当前不使用的值加上标记,再来回收它们的内存。

        3. 引用计数是另一种垃圾回收策略,记记录变量的引用值,等于0的话就归为可回收一类。

        4. 引用计数的问题是如果变量之间存在无意义的互相引用,那么就不会被回收。

        5. 解除变量的引用不仅可以消除循环引用,而且对垃圾回收也有帮助。为促进内存回收,全局对象、全局对象的属性和循环引用都应该在不需要时解除引用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

97pra

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值