JavaScript嵌套for/if语句中变量不更新问题(初学者)
问题原因
你的代码存在两个核心错误:
块级作用域变量重复声明
你在函数顶部用let allSame = true声明了函数作用域的变量,但在if/else分支中又使用let allSame重新声明了变量。let声明的变量具备块级作用域特性,分支代码块{}内重新声明的allSame是仅属于当前块的局部变量,和外层函数的allSame是完全独立的两个变量。你在分支内修改的只是块内的临时变量,外层函数的变量从未被更新,所以返回值永远是初始赋值。循环边界逻辑错误
你写的循环条件为i < list.length - 2,会漏掉最后一组相邻元素的对比:
- 若传入数组长度为2,
list.length - 2 = 0,循环完全不会执行 - 若传入数组长度为3,只会对比索引0和1的元素,不会对比1和2的元素
正确的循环条件应为i < list.length - 1,保证能遍历到最后一组相邻元素。
修正后的代码
function isSameLanguage(list) { let allSame = true; for(let i = 0; i < list.length - 1; i++) { if(list[i]["language"] !== list[i+1]["language"]){ allSame = false; break; // 发现不同后直接终止循环,无需继续遍历 } } return allSame; }
内容的提问来源于stack exchange,提问作者DCoderT
相关产品推荐
相关产品推荐

