簡體   English   中英

if語句中while循環的功能是什么? JavaScript的

[英]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));
}

問題

  1. 如果之后沒有代碼,while循環的目的是什么?
  2. 當while循環評估為true時發生了什么?
  3. while循環計算false時發生了什么?

這是完整的功能。

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 < rootnum % 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進行比較。

通常不建議在whileif語句的條件部分中使用賦值,因為它會降低代碼的可讀性。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM