面试题答案
一键面试优先使用 let 的场景
- 循环变量:
- 示例 1:在
for
循环中定义循环变量。
for (let i = 0; i < 10; i++) { console.log(i); } console.log(i); // 这里会报错,因为 i 的作用域只在 for 循环块内
- 原因:
let
声明的变量具有块级作用域,在循环结束后,该变量就不能在外部访问,避免了变量污染全局作用域等问题。 - 示例 2:
while
循环中定义控制变量。
let count = 0; while (count < 5) { console.log(count); count++; } console.log(count); // 可以访问到,因为块级作用域是在 {} 内,这里虽然有块级作用域但没有限制到 count 的外部访问
- 示例 1:在
- 需要重新赋值的变量:
- 示例 1:根据条件改变变量的值。
let status = 'loading'; if (someCondition) { status = 'loaded'; } console.log(status);
- 原因:
let
允许变量重新赋值,适用于在程序执行过程中变量值会发生变化的场景。 - 示例 2:用户交互过程中动态更新的变量。
<button onclick="updateText()">点击</button> <script> let text = '初始文本'; function updateText() { text = '更新后的文本'; console.log(text); } </script>
优先使用 const 的场景
- 定义常量:
- 示例 1:数学常量,如
PI
。
const PI = 3.1415926; console.log(PI);
- 原因:
const
声明的变量一旦赋值就不能再改变,确保了常量值的不可变性,符合数学常量等不可变数据的特性。 - 示例 2:配置文件中的固定参数。
const API_URL = 'https://example.com/api'; function fetchData() { // 使用 API_URL 进行数据请求 console.log(`正在从 ${API_URL} 获取数据`); }
- 示例 1:数学常量,如
- 对象属性不希望被重新赋值:
- 示例 1:定义一个包含固定属性的对象。
const user = { name: '张三', age: 30 }; // user = {name: '李四'}; // 这样会报错,因为 user 是 const 声明的
- 原因:虽然对象内部属性可以修改,但是对象本身不能被重新赋值,保证了对象引用的稳定性,适用于一些配置对象等场景。
- 示例 2:定义一个函数作为常量。
const add = function (a, b) { return a + b; }; // add = function (a, b) { return a - b; }; // 这样会报错,函数作为常量不能被重新赋值