javascript——为什么在循环外生成一个随机数会导致它总是相同的?

ocebsuys  于 2021-09-23  发布在  Java
关注(0)|答案(2)|浏览(479)

当我在while循环中创建一个随机数作为局部变量时,一切都起作用,但当我生成一个随机数作为全局变量时,我就会陷入无限循环。
我不明白这会有什么不同。目标是用while循环输出所有小于0.7的随机数。
下面是创建无限循环的代码:

let rnd = Math.random();
let continue = true;

while (continue) {
  console.log(rnd);
  if (rnd > 0.7) {
    continue = false;
    alert(rnd + ' is bigger than 0.7!');
  }
}

下面是有效的代码(唯一改变的是在while循环中生成随机数)。

let continue = true;

while (continue) {
  let rnd = Math.random();
  console.log(rnd);
  if (rnd > 0.7) {
    continue = false;
    alert(rnd + ' is bigger than 0.7!');
  }
}

我不想用另一种循环来创建它,我只是想更好地理解while循环。

pvcm50d1

pvcm50d11#

因为你申报的时候 Math.random() 作为一个变量,它使用一个不变的随机值创建一个绑定。示例:0.8。
如果它小于或等于0.7,那么它将导致一个无限循环,因为值不会随着每次迭代而改变。
在第二个例子中,它工作得很好,因为它是在本地声明的,并且它的值随着每次迭代而变化。
希望你能理解。

6l7fqoea

6l7fqoea2#

let rnd = Math.random(); 
let continue = true;

while (continue) {
console.log(rnd);
    if (rnd > 0.7) {
        continue = false;
        alert(rnd + ' is bigger than 0.7!');
    }
}

这里,在while循环之前,随机数生成器只执行一次。如果th随机数不大于0.7,continue将始终为真,并且它将是一个无限循环。
但是,如果在while循环中本地生成随机数,则在每个循环中都会生成一个新的数,因此您只需等待rnd数>0.7。

相关问题