为什么下述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
相关产品推荐
相关产品推荐

