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

JavaScript给定区间查找质数:for循环未迭代问题求助

问题分析与解决方案

嘿,我一眼就瞅出问题所在啦——全局变量i的冲突导致了你的外层循环“卡壳”!

问题根源

你代码里的两个for循环都用了未声明的i,在JavaScript里,未声明的变量会自动变成全局变量。这就意味着:

  • 外层循环的i和is_prime函数里循环的i是同一个变量
  • 当第一次调用is_prime(5)时,函数里的循环会修改这个全局i的值,导致外层循环的迭代逻辑被打乱,最终出现看起来“停在5不动”的异常情况

另外,你的质数判断循环条件i-1<=parseInt(number)**.5也有点绕,其实可以简化得更直观。

修复后的代码

function is_prime(number) {
  if (number === 2 || number === 3) {
    return true;
  }
  if (number === 0 || number === 1 || number % 2 === 0) {
    return false;
  }
  if ((number + 1) % 6 !== 0 && (number - 1) % 6 !== 0) {
    return false;
  }
  // 用let声明局部变量i,避免全局冲突
  for (let i = 3; i <= Math.sqrt(number); i += 2) {
    if (number % i === 0) {
      return false;
    }
  }
  return true;
}

// 外层循环同样用let声明独立的i
for (let i = 5; i <= 20; i++) {
  if (is_prime(i)) {
    console.log(i);
  }
}

关键修改点

  1. 用let声明局部i:函数内和外层循环的i现在是各自独立的局部变量,再也不会互相干扰了
  2. 简化循环条件:把i-1<=parseInt(number)**.5改成i <= Math.sqrt(number),逻辑更清晰——判断质数时,只需要检查到目标数的平方根就足够了,因为如果存在大于平方根的因数,对应的另一个因数必然小于平方根

运行修复后的代码,就能得到你预期的输出:5、7、11、13、17、19啦!

内容的提问来源于stack exchange,提问作者LebeneBou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:13