【发布时间】:2017-05-03 13:31:22
【问题描述】:
在 for 循环的条件下(这就是所谓的?)尝试生成随机数时,在 Javascript 中遇到了一些有趣的事情。
所以,如果我要这样写代码:
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结果 -
是的,循环终止条件(包括它进行的任何函数调用)在每次迭代之前都会重新评估。
标签: javascript for-loop random