文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

浅谈JavaScript暂时性死区与垃圾回收机制

2023-05-18 20:27

关注

暂时性死区(TDZ)

暂时性死区是什么

我们来看一个例子

 var tmp = 123;
 if (true) {      
     tmp = 'abc';     
     console.log(tmp);
     let tmp;  
 }

上面两条语句都会报错,因为初始化前无法访问

但是我们知道var定义的变量,是存在变量提升的,我们来看一下其原理:

任何代码运行前都会经历预编译阶段,但它占用的时间往往极其短暂,所以我们一般感知不到,它主要是在内存中开辟一些空间以此来存放变量与函数。

预编译时,js引擎创建执行上下文,会将当前作用域中的变量和函数声明提升到顶部

而暂时性死区是一种对于变量提升的限制

当一个变量被声明时,在变量声明前访问该变量会抛出ReferenceError异常。这种行为称为暂时性死区(TDZ,Temporal Dead Zone),存在于用let和const声明的变量身上

本质上是由于变量声明被提升,但是变量的赋值操作不会被提升,但是又不会像var一样给一个默认的undefined,因此在变量声明前访问该变量会抛出异常,类似于C语言中使用没有初始化的野指针,指针指向的堆或栈空间会暂时无法访问

例如:

console.log(a);
let a;
//会报错

js垃圾回收机制

内存泄漏

说到垃圾回收机制,我们首先要了解什么是内存泄漏

简单来说,我们主机的内存空间是有限的,内存泄漏就是在运行程序时减少了我们可用的内存,一般有用的内存占用叫正常使用,而用过之后不需要留着的东西占着内存空间却不释放,就叫内存泄漏

在JavaScript中,内存泄漏通常是由于以下几个原因导致的:

垃圾回收机制

JavaScript垃圾回收机制就是使用自动内存管理技术,它会自动检测哪些变量、对象和数据不再被使用,然后自动释放它们所占用的内存空间

那么它是如何实现的呢?一般有以下两种算法:

基于此,v8引擎就对垃圾回收机制做了优化

再有就是在V8引擎中,垃圾回收的频率是动态可变的,

到此这篇关于浅谈JavaScript暂时性死区与垃圾回收机制的文章就介绍到这了,更多相关JavaScript暂时性死区与垃圾回收机制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯