Javascript - for循环中的Math.random

var*_*ame 5 javascript random for-loop

刚尝试在Javascript中尝试生成一个有趣的东西,同时在for循环中生成一个随机数(就像它叫做什么?).

所以,如果我要写这样的代码:

for (var i = 0; i < 20; i++) {
    var count = 0;
    for (var j = 0; j < Math.floor(Math.random() * 20); j++) {
        count++;
    }
    console.log(count);
}
Run Code Online (Sandbox Code Playgroud)

它将返回如下结果:

9
5
8
3
3
2
6
8
4
4
5
6
3
3
5
3
4
5
3
11
Run Code Online (Sandbox Code Playgroud)

但是,如果我在第二个for循环之前在变量中生成一个随机数:

for (var i = 0; i < 20; i++) {
    var count = 0;
    var loopEnd = Math.floor(Math.random() * 20 + 1);
    for (var j = 0; j < loopEnd; j++) {
        count++;
    }
    console.log(count);
}
Run Code Online (Sandbox Code Playgroud)

它将返回如下结果:

11
13
14
2
19
19
17
19
2
18
5
15
18
2
1
19
16
15
13
20
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?它让我困惑了一会儿.for循环中的Math.random()是否在每次迭代后生成一个新的随机数?循环是否运行代码,迭代并检查条件,并在每次检查条件时生成一个新的随机数?这是发生了什么,这就是为什么控制台中的数字小于在for循环之前在变量中使用Math.random()的原因?

Mit*_*eat 5

在第一个示例的内部循环中:

...
for (var j = 0; j < Math.floor(Math.random() * 20); j++) {
    count++;
}
...
Run Code Online (Sandbox Code Playgroud)

j < Math.floor(Math.random() * 20)每次循环的迭代都会评估终止条件,因此终止值会随着调用而改变每次迭代,从而Math.random()使循环更有可能提前终止。