JS代码中变量q显示0而非c的值,问题何在?return语句有误吗?
问题分析与修复方案
核心问题拆解
原始类型参数按值传递,局部修改不影响外部变量
你传入的q是数字(JS原始类型),函数search内部的c只是它的副本,修改c只会改变局部变量,完全不会影响外部的q,所以最后页面显示的还是q的初始值0。return语句写法错误,且未接收返回值
return array, target, c;里的逗号是逗号运算符,它会依次执行每个表达式,但最终只返回最后一个值(也就是c)。更关键的是,你调用search时根本没把返回值赋值给q,就算return写对了也没用。变量未声明,污染全局作用域
left、right、mid都没加let/const声明,会自动变成全局变量,很容易和其他代码的变量冲突,引发意外bug。二分查找的mid计算可以优化
每次计算mid后再用Math.trunc截断冗余,直接用Math.floor((left + right)/2)就能得到整数索引,代码更简洁。
修复后的代码
主JS文件:
var q = 0; // 接收函数返回值赋值给q q = search(a, 21); document.getElementById("demo1").innerHTML = q;
另一个JS文件:
function search(array, target) { // 声明局部变量,避免全局污染 let left = 0; let right = array.length - 1; while (left <= right) { // 直接计算整数类型的mid值 const mid = Math.floor((left + right) / 2); if (array[mid] === target) { console.log(mid); // 直接返回找到的索引 return mid; } else if (target < array[mid]) { right = mid - 1; } else { left = mid + 1; } } // 未找到目标时返回标识值(比如-1) return -1; }
内容的提问来源于stack exchange,提问作者free premium
相关产品推荐
相关产品推荐

