![](/img/trans.png)
[英]Javascript If Statement inside while loop inside a function breaks page
[英]What is the functionality of the while loop inside the if statement? JavaScript
下面是一個函數,它返回JavaScript中給定數字的素因子。 我沒有編寫該函數,但一直在研究它以擴展我的編程知識。
我的問題是關於以下if語句中的while循環。
if(num % x){
x = 3;
while((num % x) && ((x = x+2) < root));
}
問題
這是完整的功能。
function getPrimeFactors(num){
num = Math.floor(num);
var root = 0;
var factors = [];
var doLoop = 1 < num;
var x = 0;
while(doLoop){
root = Math.sqrt(num);
x = 2;
if(num % x){
x = 3;
while((num % x) && ((x = x+2) < root));
}
if(x > root){
x = num;
}else{
x = x;
}
factors.push(x);
doLoop = (x != num);
num = num/x;
}
return factors;
}
謝謝您的幫助!!!
注意while語句中的x = x+2
。 它會反復將x
的值加2,直到while子句的計算結果為true。
所以while循環沒有body阻塞執行,直到它的子句變為true。 如果您要將子句中的變量作為條件的一部分進行變更,那么這只是一個好主意。 否則你可能會陷入無限循環。
它確實是這樣做的:
if(num % x){
x = 3;
while(num % x){
x = x + 2;
if(x < root)
continue;
else
break;
}
}
除此之外,在條件中將兩個加到x
右邊,所以不需要一個體。 循環將執行,直到x < root
或num % x
無效為止。 身體里面沒有任何指示。
它與執行for循環時發生的情況非常相似
for(int i=0; i < n; i++)
;
看看for循環體中沒有指令,但循環仍然會向i添加一個,直到i >= n
。
實際上,此代碼表示如果x
不能被3
整除,則將2
加到x
並繼續,如果結果值小於root
。 一旦這些條件中的一個不再成立,循環就會終止,但同時, x
已經沿途更新。
請注意, x = x + 2
計算賦值的左操作數。
實際上循環中發生了一件事:
V
while((num % x) && ((x = x+2) < root));
x = x + 2
是一個賦值,你可以看到它不是==
或===
運算符而是a =
。
(x = x + 2) < root
表示將x
遞增2
,然后將其與root
進行比較。
通常不建議在while
或if
語句的條件部分中使用賦值,因為它會降低代碼的可讀性。
while
語句確實改變了x
變量的值。 它可以被重寫為如下所示:
if (num % x) {
x = 3;
if (num % x){
do {
x = x + 2;
} while (num % x && x < root);
}
}
x的值遞增(乘以2),直到它等於或大於root的值
while條件/循環中有一個賦值。 它在循環運行時進行評估,因此每個循環都會更新“x”的值,直到不再<root(除了&和:&& num%x <root)。
非常聰明,但我希望這不是編程的介紹文本/書籍/帖子。
看起來你的掛機事實是,在while語句中沒有正文。 理解循環體是可選的,它的行為方式與具有體的循環相同。
基本上while循環會反復檢查條件。 是的,如果編碼不正確,這可能導致無限循環。 在這種情況下,'x'將增加2,直到達到或超過'root'的值。
歸功於@Teemu的“達到或”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.