有人可以解释一下我从 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
循环中,变量i
从2
开始,条件检查是否num > i
,因此for
循环永远不会执行如果 num
等于 2
.
但是,由于最终语句return num > 1
(因为2
大于1
),2
被包含在最终结果中。
现在是开始熟悉调试器使用的好时机。使用调试器,您可以在代码执行时逐行调试代码,观察确切的运行时行为以及在执行每个操作时变量值的变化。
执行此操作时,您会注意到 2
的值从未达到此代码行:
if (num % i == 0) {
注意for
循环中的条件:
for (let i = 2; num > i; i++) {
因此,当 num
为 2
时,永远不会进入循环(因为 num > i
立即为 false
)并且控制会继续进行下一个操作。下一个操作 returns true
:
return num > 1;
我了解有关此代码的所有内容(或者至少我认为我了解),除了它在新过滤数组中包含数字“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
循环中,变量i
从2
开始,条件检查是否num > i
,因此for
循环永远不会执行如果 num
等于 2
.
但是,由于最终语句return num > 1
(因为2
大于1
),2
被包含在最终结果中。
现在是开始熟悉调试器使用的好时机。使用调试器,您可以在代码执行时逐行调试代码,观察确切的运行时行为以及在执行每个操作时变量值的变化。
执行此操作时,您会注意到 2
的值从未达到此代码行:
if (num % i == 0) {
注意for
循环中的条件:
for (let i = 2; num > i; i++) {
因此,当 num
为 2
时,永远不会进入循环(因为 num > i
立即为 false
)并且控制会继续进行下一个操作。下一个操作 returns true
:
return num > 1;