我在尝试在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);
}
它将返回以下结果:
9
5
8
3
3
2
6
8
4
4
5
6
3
3
5
3
4
5
3
11
但是如果我在第二个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);
}
它会返回像这样的结果:
11
13
14
2
19
19
17
19
2
18
5
15
18
2
1
19
16
15
13
20
这里到底发生了什么?我有点困惑。for循环中的Math.random()是在每次迭代后生成一个新的随机数吗?循环运行代码、迭代、检查条件,每次检查条件时都会生成一个新的随机数吗?这就是正在发生的事情,这就是为什么控制台中的数字比在for循环之前使用Math.random()赋值给变量要小的原因吗?
j < Math.floor(Math.random() * 20)
会在每次迭代中运行,并且每次都具有不同的随机值...所以,当然你很快就会得到false
结果。 - Jaromanda X