1. 修复变量未定义的运行时错误

修复变量未定义的运行时错误 学习卡片

任务说明

本案例提供一个包含变量未定义错误的JavaScript代码片段,该错误会在运行时抛出ReferenceError。你的任务是定位错误根源,修复代码,使其能够正常计算并输出指定结果。

问题代码

function calculateTotal(price, quantity) {
    const discount = 0.9;  // 10% off
    // Bug: 变量名拼写错误,subtotal 被误写为 subTotal
    const subTotal = price * quantity;
    const total = subTotal * discount;
    return total;
}

function showResult() {
    const productPrice = 100;
    const productQuantity = 3;
    const finalPrice = calculateTotal(productPrice, productQuantity);
    // Bug: 变量名不一致,finalPrice 被误写为 finalprice
    console.log("总价: " + finalprice);
}

showResult();

错误分析

运行上述代码时,JavaScript引擎会抛出ReferenceError: finalprice is not defined。这是因为在showResult函数中,变量被声明为finalPrice(驼峰命名),但在console.log中却引用了finalprice(全小写)。JavaScript变量名区分大小写,因此finalprice在作用域中不存在,导致引用错误。

修复方案

将console.log中的变量名从finalprice改为finalPrice,使其与声明保持一致:

function calculateTotal(price, quantity) {
    const discount = 0.9;  // 10% off
    const subTotal = price * quantity;
    const total = subTotal * discount;
    return total;
}

function showResult() {
    const productPrice = 100;
    const productQuantity = 3;
    const finalPrice = calculateTotal(productPrice, productQuantity);
    // 修复:变量名改为 finalPrice,与声明一致
    console.log("总价: " + finalPrice);
}

showResult();

验证方法

将修复后的代码保存为fix-reference-error.js,在Node.js环境中运行:

node fix-reference-error.js

观察控制台输出。修复成功后,应输出:

总价: 270

该结果由代码逻辑直接推出:100 × 3 = 300,300 × 0.9 = 270。若仍出现ReferenceError,请检查所有变量名是否严格一致(包括大小写)。

调试要点

  • 当浏览器或Node.js抛出ReferenceError: xxx is not defined时,错误信息中的变量名即为查找线索。
  • 检查该变量在作用域内是否已用const/let/var声明,并确认引用处的拼写与大小写完全一致。
  • 使用IDE的“查找所有引用”功能可快速定位不一致的引用点。
变量未定义错误定位与修复流程 运行时错误 ReferenceError: finalprice is not defined 定位错误行 console.log("总价: " + finalprice) 检查声明 const finalPrice = calculateTotal(...) 声明: finalPrice 引用: finalprice ⟹ 大小写不一致 JavaScript 变量名区分大小写 修复方案 将引用处改为 finalPrice,与声明保持一致 验证: node fix-reference-error.js → 输出 "总价: 270"