You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:51:10