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

为什么下述JavaScript的isPrime函数调用isPrime(2)会返回undefined?

问题根因

当调用isPrime(2)时,执行逻辑如下:

  • 参数2不满足num <= 1的判断条件,进入else分支
  • else分支内for循环的执行条件为i < num,i初始值为2,2 < 2的结果为false,循环体完全不会执行
  • 变量result仅声明未赋初始值,也没有在该场景下被赋值,最终返回的就是undefined

其他大于2的参数不会触发该问题,是因为for循环的初始判断i=2 < 大于2的参数结果为true,循环体至少执行一次,会给result完成赋值。另外原代码中的循环变量i未声明,会隐式成为全局变量,属于潜藏的小问题。

修复方案

调整变量初始值设置,把素数判断的默认值设为true,无需在循环内部处理非因数场景的赋值即可解决问题:

function isPrime(num) {
  if (typeof num !== "number") {
    throw "The input needs to be a number!";
  }

  if (num <= 1) {
    return false;
  }
  // 大于1的数默认先判定为素数,后续检测到因数再修改状态
  var result = true;

  for (let i = 2; i < num; i++) {
    if (num % i === 0) {
      result = false;
      break;
    }
  }

  return result;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:57:03