有人可以解释一下我从 MDM 网络文档中获取的 javascript 代码吗?

Can someone explain this javascript code I took from MDM web docs?

我了解有关此代码的所有内容(或者至少我认为我了解),除了它在新过滤数组中包含数字“2”这一事实。我知道代码应该 return 所有质数,但是如果 (num % i == 0) { return false },不应该让它跳过数字“2”吗?

const array = [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13];

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

console.log(array.filter(isPrime)); // [2, 3, 5, 7, 11, 13]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

for循环中,变量i2开始,条件检查是否num > i,因此for循环永远不会执行如果 num 等于 2.

但是,由于最终语句return num > 1(因为2大于1),2被包含在最终结果中。

现在是开始熟悉调试器使用的好时机。使用调试器,您可以在代码执行时逐行调试代码,观察确切的运行时行为以及在执行每个操作时变量值的变化。

执行此操作时,您会注意到 2 的值从未达到此代码行:

if (num % i == 0) {

注意for循环中的条件:

for (let i = 2; num > i; i++) {

因此,当 num2 时,永远不会进入循环(因为 num > i 立即为 false)并且控制会继续进行下一个操作。下一个操作 returns true:

return num > 1;