JavaScript内存释放和作用域销毁
2022/7/5 5:21:42
本文主要是介绍JavaScript内存释放和作用域销毁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JavaScript内存释放和作用域销毁
-
堆内存
我们知道,像对象这种引用数据类型,都是在栈区中存一个地址,然后指向堆区
那么我们就不得不聊一个问题,它什么时候被销毁呢?难道堆区的空间一直开着吗?
不会。
规则是这样的:假如外面有变量引用了这个地址(即把这个地址值赋给了其它人),那么我们就说,有人用着这个值,它不能被销毁;除非没有人用了(这个值没有赋给任何人),那么 js 引擎会在空闲的时候把它销毁(垃圾回收)
举例:
let obj = {name: 'jack'} //此时堆区中开辟了一块内存 obj = null //没人用堆区的这个对象了,此时这个对象在堆区中被销毁掉
-
栈内存
处于全局作用域的,都放在栈区中(先不考虑其它地方)
下面举几个经典的例子
function fn(){ let num = 100 return function(){ } } let foo = fn //fn不销毁
function fn(){ let num = 100 return function(){ } } fn() //fn执行完会销毁
function fn(){ let num = 100 return function(){ } } fn()(); //fn不立即销毁,等到第二个括号执行完之后会销毁
注意:销毁了之后,它里面的东西也是不存在了的,比如 num 变量不会存在了,因为整个都已经销毁了
这篇关于JavaScript内存释放和作用域销毁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-01为什么公共事业机构会偏爱 TiDB :TiDB 数据库在某省妇幼健康管理系统的应用
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署