JavaScript暂时性死区与垃圾回收机制是什么

发布时间:2023-05-04 15:17:23 作者:iii
来源:亿速云 阅读:92

本篇内容介绍了“JavaScript暂时性死区与垃圾回收机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

暂时性死区(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暂时性死区与垃圾回收机制是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. ThinkPHP控制器里javascript代码不能执行的问题如何解决
  2. 如何在javascript中使用 some()函数

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript

上一篇:浏览器缓存技术怎么实现

下一篇:JavaScript中好用的解构方法有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》