面试题答案
一键面试let 和 const 声明变量的主要差异
- 可变性:
- let:声明的变量是可变的,可以重新赋值。例如:
let num: number = 10; num = 20; // 合法,重新赋值成功
- const:声明的变量是常量,一旦赋值后不能重新赋值。例如:
const PI: number = 3.14; // PI = 3.1415; // 报错,不能对常量重新赋值
- 作用域:
- let:具有块级作用域。例如:
{ let localVar: string = 'inside block'; console.log(localVar); // 输出 'inside block' } // console.log(localVar); // 报错,localVar 在此处未定义,超出其块级作用域
- const:同样具有块级作用域。例如:
{ const constVar: string = 'inside block'; console.log(constVar); // 输出 'inside block' } // console.log(constVar); // 报错,constVar 在此处未定义,超出其块级作用域
前端开发中适用场景
- let 的适用场景:
- 循环变量:在 for 循环中很常用,因为每次迭代变量需要改变。例如:
for (let i = 0; i < 10; i++) { console.log(i); } // 这里的 i 在循环外不可访问,符合块级作用域特性
- 需要动态更新值的变量:比如在实现一个计数器功能时,变量值会随着用户操作不断变化。例如:
let count: number = 0; function increment() { count++; return count; }
- const 的适用场景:
- 配置项:前端应用中一些固定的配置信息,如 API 地址。例如:
const API_URL: string = 'https://example.com/api';
- 不应该被修改的引用类型(对象、数组等):虽然 const 声明的引用类型变量不能重新赋值,但对象或数组内部的值可以修改。例如:
const user: { name: string; age: number } = { name: 'John', age: 30 }; // user = { name: 'Jane', age: 25 }; // 报错,不能重新赋值 user.age = 31; // 合法,对象内部属性可以修改
- 用于避免误修改的变量:在一些计算过程中,某些中间结果不希望被意外修改,使用 const 声明可以起到保护作用。例如:
const result: number = calculateSomeValue(); // 后续代码不会意外修改 result 的值