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 变量不会存在了,因为整个都已经销毁了
这一路,灯火通明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现