JavaScript数组查找最小值报错:ReferenceError: lowest is not defined 原因解析
错误原因解析
核心问题:变量作用域不匹配
你在for循环的代码块内部用let声明了lowest变量,而let是块级作用域的关键字——这意味着lowest只能在循环的{}内部被访问。当循环结束后,函数执行到return lowest这一行时,当前函数作用域里根本没有名为lowest的变量,所以JS引擎抛出了ReferenceError: lowest is not defined。
附带的逻辑bug
就算你把lowest的声明移到循环外面,当前代码也没法正确找到最小值:因为每次循环都会把lowest重置为当前的element,然后执行if (element < lowest)——这相当于拿一个值和自己比较,永远不会触发赋值操作,最后返回的只会是数组最后一个元素。
修复后的代码
function findLowest(numbers) { // 把lowest放在函数作用域,初始化为数组第一个元素 let lowest = numbers[0]; // 从第二个元素开始遍历(第一个已经作为初始值了) for (let i = 1; i < numbers.length; i++) { const current = numbers[i]; if (current < lowest) { lowest = current; } } return lowest; } const height = [10, 16, 25, 2]; const result = findLowest(height); console.log(result); // 输出2
内容的提问来源于stack exchange,提问作者Imtiaz Ahmmed Asif
相关产品推荐
相关产品推荐

