![](/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.