面试题答案
一键面试let和const声明变量在块级作用域的行为特性
- let:
- 块级作用域:let声明的变量只在其所在的块级作用域内有效。例如在一个
if
块、for
循环块等内声明的let
变量,在块外部无法访问。 - 不存在变量提升:与
var
不同,let
声明的变量不会被提升到作用域顶部。如果在声明之前访问,会抛出ReferenceError
。 - 允许重新赋值:声明后可以重新给变量赋值。
- 块级作用域:let声明的变量只在其所在的块级作用域内有效。例如在一个
- const:
- 块级作用域:同
let
,只在其所在的块级作用域内有效。 - 不存在变量提升:和
let
一样,不会被提升到作用域顶部,声明前访问会抛出ReferenceError
。 - 不允许重新赋值:一旦声明,就不能重新赋值。对于对象和数组,虽然不能重新赋值整个对象或数组,但可以修改其内部属性或元素。
- 块级作用域:同
在前端代码优化中的应用
- 循环中的应用:
- 使用let:在
for
循环中使用let
可以创建独立的块级作用域,每个迭代的变量都是独立的。
for (let i = 0; i < 5; i++) { setTimeout(() => { console.log(i); }, 1000 * i); } // 输出:0 1 2 3 4
- 使用const:如果在循环中某个值在迭代过程中不会改变,可以使用
const
。例如,循环的上限值。
const limit = 5; for (let i = 0; i < limit; i++) { console.log(i); }
- 使用let:在
- 条件语句中的应用:
- 使用let:在
if
语句块中声明let
变量,可以限制变量的作用域。
if (true) { let message = 'This is a message'; console.log(message); } // 这里访问message会报错,因为message只在if块内有效
- 使用const:如果在条件语句块中声明的变量是一个常量值,使用
const
。
if (true) { const status = 'active'; console.log(status); }
- 使用let:在