以下は素数を求めるためのコードとなるのですが、お聞きしたい所がございます。
javascript
1//素数を求めるためのジェネレーター 2function* genPrimes() { 3 let num = 2;//素数の開始位置 4//2から順に素数を判定し、素数の場合にだけyield(無限ループ) 5 while (true) { 6 if (isPrime(num)) { yield num; } 7 num++; 8 } 9} 10//引数valueが素数かどうかを判定 11function isPrime(value) { 12 let prime = true;//素数かどうかを表すフラグ 13//2~Math.sqrt(value)で、valueを割り切れる値があるかを判定 14 for (let i = 2; i <= Math.floor(Math.sqrt(value)); i++) { 15 if (value % i === 0) { 16 prime = false;//割り切れたら素数ではない 17 break; 18 } 19 } 20 return prime; 21} 22 23 24 25for(let value of genPrimes()) { 26//素数が101以上になったら終了 27 if (value > 100) { break; } 28 //console.log(value); 29 30} 31
上記、while文内の「if(isPrime(num))」この部分のnumの値が2から順当に加算されていき「4」が入った時の、処理に関してなのですが、まず、isPrime関数のfor文の条件式がTRUEとなり、次のif文内で、primeがfalseとなり、if文を抜け、for文の繰り返しに戻り、iの値が3となり条件式がfalseとなり、return prime が実行され、while文に戻ります。次にnumの値が、5となりisPrime関数が実行され、primeにtrueが入り、for文が実行されるのですが、この時、iの値が2のままだと、primeの値がfalseとなってしまいます。iの値が、numの値が4だった時の3のまま継続されるということはないと思うのですが、このままだと素数であるはずの5が返らないということになってしまいます。
この点に関しまして、どうしても理解できないため、ご解説の方お願いしたいです。