面试官:let, const 解决了什么问题?
我们在面试时,经常会被问“let, const 解决了什么问题?”,这种就是基础性的问题,可以回答的完美,也可以回答的很基础,一般下面这种框架回答就可以:
- var 变量 全局作用域, 浏览器端 var 声明在window,挂载到window上的
- let和const 声明的是不会挂载到window上的,可以减少变量污染
- 变量提升问题 hoisting 在声明之前就访问显示 undefined,不报错 ,我们看的很不舒服
- 块级作用域 es6一大使命是让js成为像java一样的企业级大型语言
- 改原来的var容易增加学习负担,变量提升这种不好理解的,所以另发明let把影响代码可读性的特性通过暂时性死区规避
- 全局作用域/函数作用域/块级作用域 for while 。。。。。。 {} 块级
- 代码中的配置等非常需要常量,var 没有常量功能,所以用 const 实现,
总结来说,你可以这样回答:
JavaScript底层原理包括变量提升、作用域链等,ES6引入了let和const来解决var存在的全局作用域、变量污染等问题,同时通过块级作用域和暂时性死区提高了代码可读性和安全性,满足了JavaScript成为企业级语言的需求,const还解决了var缺乏常量功能的问题。
<顺便吆喝一句,如果有对技术大厂外包不排斥的,前、后端/测试,感兴趣的可以去一试,多地都在捞人,待遇还可以。>
在回答的时候穿插一些例子,你就举下面这些例子:
1. var
变量声明
- 函数作用域:
var
声明的变量在函数作用域中有效,而不是块级作用域。 - 变量提升:使用
var
声明的变量会被提升到其所在函数的顶部。
示例:
console.log(name); // 输出:undefined var name = "John"; console.log(name); // 输出:John
第一处输出在我们看来很反人类,这都不报错,所以es6后,就推出了let。
2. let
变量声明
let
是ES6引入的新关键字,用于声明变量。相比var
,let
有以下优点:
- 块级作用域:
let
声明的变量只在其所在的块级作用域内有效。 - 暂时性死区:使用
let
声明的变量在声明之前是不可访问的。
示例:
{ console.log(name); // 报错:name is not defined let name = "Alice"; console.log(name); // 输出:Alice }
3. const
常量声明
const
也是ES6引入的关键字,用于声明常量。与let
相比,const
有以下特点:
- 常量值不可变:使用
const
声明的变量必须在声明时初始化,并且其值在声明后不能被修改。
示例:
const PI = 3.14; PI = 3.14159; // 报错:尝试修改常量值
——转载自作者:纯粹要努力