这一次,彻底搞懂let、var、const

前言

关于js定义变量时使用的三个常用的定义方法let、var、const是在js编程领域的基石,无论是在面试中还是实际工作中,这些都是我们必须要掌握的知识点。

let、var、const的区别

1:是否可以重复定义

var可以重复定义,但是let和const不能重复定义。

2:值是否可以修改

var和let定义的变量可以修改值,但是const如果定义的是常量值不能被改变,如果定义的是引用类型,其地址不能被改变。

3:是否有变量声明提升

var存在声明提升,let和const不存在声明提升,存在暂时性死区。

4:是否能够形成块级作用域

var不能形成块级作用域,但是function可以,let和const会形成块级作用域。

5:是否支持循环

var和let是支持循环的,但是const不支持循环。

RQ1:var为什么可以重复定义变量?

JS运行时编译器负责词法分析和语法分析、代码生辰等工作,编译器在作用域判断这是重名声明时,会忽略var直接赋值。

RQ2:let、const与栈、堆之间的关系,栈、堆哪个访问速度更快,为什么?

var会预先在站内存里跟配空间,等实际语句执行的时候再存储对应的值,如果传入的是引用类型,会在堆内存中开辟一个内存空间存储实际内容,栈内存中存储的是一个指向堆内存的指针,let和const都不会预先分配内存空间在栈中,并且在分配变量的时候会检查是否有重名的情况,有则报错。

RQ3:const 声明生成对象的时候,如何使其不可更改?

通过Object.freeze()或者Object.defineProperty()使其不可更改,其中Object.freeze只是浅层的冻结,所以我们可以使用Object.defineProperty然后利用递归的方式使其深度不可更改。

猜你喜欢

转载自blog.csdn.net/sinat_41696687/article/details/123081581