我了解这个问题看起来多么荒谬,以及我对这个问题的描述多么歪曲,但我是这个行业的新手,很抱歉
现在我在 learn.javascript.ru 学习 JS,我到了函数部分。在那里你可以找到以下算法:
function showPrimes(n) {
nextPrime: for (let i = 2; i < n; i++) {
for (let j = 2; j < i; j++) {
if (i % j == 0) continue nextPrime;
}
alert( i ); // простое
}
}
showPrimes(10);
我不明白它是如何工作的,我已经尝试在一张纸上查看它。该函数实际上显示了从 2 到 n 的素数。以下是该函数应该如何为我工作:
我们调用showPrimes()
具有值的函数10
>>
i
外循环和内循环初始都是j
2,所以内循环失败,输出2 (alert(i))
>>
转到外循环的下一次迭代,i
变成 3 >>
内部触发for
,检查除法的其余部分>>
由于 3 除以 2 的余数不是 0,continue
所以它不起作用>>
现在内部循环开始一个新的迭代,j
它变成 3,i
我们还剩下 3 个,这意味着循环不工作并且警报显示 3 >>
i = 4 j = 3
,内循环有效,余数不等于0,所以我们进行下一次迭代j
变成4,也就是说内循环没有开始,显示4,但是4不应该显示(而且不显示,程序正常运行,我只是没有正确理解所有内容而不是所有内容)所以我错在哪里?
因为 在内循环中,条件
j < i
永远j
不会相等i
,并且4%4
根本不计算组合,但是外循环的下一次迭代从 i = 5 开始。对于每个新的 j,内部循环再次开始(从 2 开始),因此对 4(以及通常对所有偶数)的测试已经在 2 处结束,因为 4%2 等于 0。
跳过这一刻,我继续学习教程,去研究调试器并使用它,事实是
j
在内部循环中它不断地将其值重置为 2 每次迭代外部循环。简而言之,建议像我一样的手鼓,使用调试器:)