前端面试题 口语化复述解答(从2025.3.8 开始频繁更新中)
背景
看了很多面试题及其答案。但是过于标准化,一般不能直接用于回复面试官,这里我将总结一系列面试题,用于自我复习也乐于分享给大家,欢迎大家提供建议,我必不断完善之。
Javascript
ES6
1. var let const 的区别:
它们均是变量声明的关键字,其中let const是ES6新增关键字。引入这两个关键字的原因在于var没有块级作用域所导致变量滥用的问题。
- var自带变量提升,js编译的时候会将所有用var声明的变量语句提升到整个作用域首位,所以在原有声明前引用该变量不会报错。
- 而let const在变量声明前引用则会报错,原因即此二者无法变量提升导致存在暂时性死区,即从当前作用域的首部开始到变量声明前的上下文无法引用该变量
- var 滥用原因还有可以多次声明同一标识符,这是let const无法做到的。并且由于var 没有块级作用域,用var声明了一个标识符后 在其块级作用域后又重新声明一次则会导致原值被替换为新值。但是var是拥有函数作用域的,所以在函数中重新声明该标识符,在函数作用域外的值则不会被替换,但是如果没用var声明而只是赋值则会被替换。
- let 和 var的值是可以修改的,const 声明的变量对应的地址中的值是不能修改,但是如果当期变量是对象的话,其声明变量的地址中的值是一个指针,指向堆中的值,此时我们可以修改堆中的值(即const变量修改对象的属性是生效的)
- 根据最佳实践来说,尽量能用const就不用let,能用let就不用var