javascript - 尽管处于不同的功能中,为什么它会陷入无限循环?
问题描述
我正在尝试打印两个给定数字(num1
和num2
)之间的所有素数。如果我在isPrime
函数的 for 循环中使用不同的变量名,那将按预期工作。但是在使用相同的变量名时,i
它会进入无限循环。为什么会这样?
下面是我的代码:
showPrimeNumbers();
function showPrimeNumbers(){
var num1 = 10;
var num2 = 15;
for (i=num1; i<=num2; i++){
if(isPrime(i)){
console.log(i+" is a prime number.");
}
}
}
function isPrime(num){
var flag = true;
for (i=2;i<=num-1;i++){
if(num%i == 0){
flag=false;
break;
}
}
return flag;
}
解决方案
您i
的 s 没有var
或let
在它们前面,因此它们都引用(并隐式分配给)相同的全局变量。因此,每次isPrime
运行时,i
都会重置为 3 或 4,重复 - 它永远不会达到 15。
永远不要隐式分配给全局变量。而是放在slet
前面。i
其他可能使代码更清晰的东西,而不是有一个flag
可能被重新分配的变量,就是简单地return false
或return true
:
showPrimeNumbers();
function showPrimeNumbers(){
var num1 = 10;
var num2 = 15;
for (let i=num1; i<=num2; i++){
if(isPrime(i)){
console.log(i+" is a prime number.");
}
}
}
function isPrime(num){
for (let i=2;i<=num-1;i++){
if(num%i == 0){
return false;
}
}
return true;
}
推荐阅读
- java - 无法切换到框架,即使我通过正确的框架 id 或 xpath 也找不到元素
- saml - ADFS 3.0 与 WS-Federation 一起使用,但在使用 SAML 时失败
- python - 在 mplstyle 或 matplotlibrc 中设置箱线图参数
- javascript - 有人能解释一下这个解决方案是如何工作的吗
- c++ - 这段代码“seperature | | i”的一部分是什么意思?
- json - 启用禁用的切换按钮/更改 json 值角度
- php - 在PHP中的文本文件中添加每行的开头和结尾字符
- ceph - ceph-mon[1437]:警告:无法创建 /var/run/ceph:(13) 权限被拒绝
- php - 如何在php中生成下一个序列号并比较第一个序列号?
- java - Kafka 支持 java 10 还是 java 11?