MST
星途 面试题库

面试题:TypeScript 中 let 和 const 使用场景的分析

请举例说明在哪些前端开发场景下优先选择使用 let,哪些场景下优先选择使用 const,阐述原因并各举至少两个不同的场景示例。
35.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

优先使用 let 的场景

  1. 循环变量
    • 示例 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 的外部访问
    
  2. 需要重新赋值的变量
    • 示例 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. 定义常量
    • 示例 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} 获取数据`);
    }
    
  2. 对象属性不希望被重新赋值
    • 示例 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; }; // 这样会报错,函数作为常量不能被重新赋值