javascript - 为什么这个函数会产生无限循环?

标签 javascript loops for-loop infinite-loop prime-factoring

第一个函数确定一个数是否为素数。第二个函数应该创建一个数组,其中包含最大值(包括最大值)的所有素数,但由于某种原因它给了我一个无限循环。

function isPrime(num) {
  for (i = 2; i < num; i++) {
    if (num % i === 0) {
      return false
    }
  }
  if (num <= 1) {
    return false;
  }
  return true;
}

function primes(max) {
  var all = [];
  for (i = 2; i <= max; i++) {
    if (isPrime(i)) {
      all.push(i);
    }
  }
}

primes(17);

最佳答案

您的i变量是全局变量,因此两个函数都使用相同的i。这意味着第一个函数在第二个函数循环时更改它。

因为第一个函数在完成时会将i设置为num-1,并且numi的值在执行之前,它会有效地将i减一。因此,i 将在第二个函数的下一次循环迭代中获得相同的值,而永远不会前进。

通过在两个函数中添加 var 关键字来解决此问题。

for(var i=2; // ...etc) 

关于javascript - 为什么这个函数会产生无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41867603/

相关文章:

javascript - 提交的 Ajax 复选框防止点击发布/提交

Python缩进之谜

java - 为什么我可以在java的for循环中创建几个文件对象

swift - 在 Swift 函数中,为什么 'return' 必须在 for 循环之外,当函数包含一个 for 循环且循环内有 if 语句时?

java - 查找数组中两个连续元素之间的最大差异时出现 ArrayIndexOutOfBoundsException

Javascript 引用转义给出错误

javascript - 如何获取外部页面的内容作为javascript对象?

java - 等待使用 Java 在 selenium webdriver 中手动单击登录按钮

c++ - 如何使用循环和数组在 C++ 中进行比较和检查

c# - 嵌套循环意外中断