【问题标题】:Can someone explain this javascript code I took from MDM web docs?有人可以解释我从 MDM 网络文档中获取的这个 javascript 代码吗?
【发布时间】:2021-08-13 19:00:53
【问题描述】:

我了解有关此代码的所有内容(或者至少我认为我了解),除了它在新的过滤数组中包含数字“2”这一事实。我知道代码应该返回所有素数,但如果 (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

【问题讨论】:

    标签: javascript callback higher-order-functions


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      执行此操作时,您会注意到对于 2 的值,这行代码永远不会到达:

      if (num % i == 0) {
      

      注意for循环中的条件:

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

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

      return num > 1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-31
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-20
        • 1970-01-01
        • 2022-12-16
        相关资源
        最近更新 更多