JavaScript中for循环内定义的bill在if语句未定义如何解决
错误原因
- 你使用
let关键字声明的bill变量具有块级作用域,仅在声明它的for循环代码块({}包裹的区域)内有效,for循环外部的if语句没有权限访问该变量,因此会抛出bill 未定义的报错。 - 当前代码逻辑存在结构问题:若将
if判断放在for循环外部,即便解决作用域问题,也只能获取到循环结束时最后一个账单的数值,无法实现为每一笔账单计算对应小费的需求。
修复方法
将小费计算的if逻辑移入for循环内部,即可同时解决作用域访问问题与逻辑缺陷,修复后的可运行代码如下:
'use strict'; const bills = [125, 555, 44] // 可选:定义数组存储每一笔账单对应的小费 const tips = [] for (let i=0; i< bills.length; i++) { let bill = bills[i] console.log('当前账单:', bill) // 提前声明tip变量,避免块级作用域限制 let tip; if(bill >= 50 && bill <= 300) { tip = bill * 0.15 } else { tip = bill * 0.2 } tips.push(tip) console.log('对应小费:', tip) } console.log('所有小费结果:', tips)
扩展说明
如果确实需要在for循环外部访问bill变量,可将bill的声明移到for循环外层:
'use strict'; const bills = [125, 555, 44] // 外层声明变量,作用域覆盖后续的for循环与if判断 let bill; for (let i=0; i< bills.length; i++) { bill = bills[i] console.log(bill) } // 此时外部可正常访问bill,拿到的是循环最后一次赋值的数值 let tip; if(bill >= 50 && bill <= 300) { tip = bill * 0.15 } else { tip = bill * 0.2 } console.log('最后一笔账单的小费:', tip)
内容的提问来源于stack exchange,提问作者Golden-Dragon
相关产品推荐
相关产品推荐

