下面是创建 1 到 80 之间的随机 8 个数字的代码。它将随机数放入 numbers 数组并写入 div。如果代码递增 if 括号内的 x,则代码运行没有任何问题。 如果我将 'x++' 放在 if 括号之外,经过几次运行后我发现有时它会创建一个相同的随机数并在数字数组中找到。然后它跳过,那个 div 变空了。
在 if block 中递增 x 和在 if block 外递增 x 有什么区别?
在 if block 内:
var numbers = []
var luckyNumber;
var x = 1;
while (x <= 8) {
luckyNumber = Math.floor(Math.random() * 80 + 1);
if (numbers.indexOf(luckyNumber) == -1) {
document.getElementById('k' + x).innerHTML = luckyNumber;
numbers.push(luckyNumber);
x++;
}
}
在 if block 之外:
var numbers = []
var luckyNumber;
var x = 1;
while (x <= 8) {
luckyNumber = Math.floor(Math.random() * 80 + 1);
if (numbers.indexOf(luckyNumber) == -1) {
document.getElementById('k' + x).innerHTML = luckyNumber;
numbers.push(luckyNumber);
}
x++;
}
HTML:
<div id="k1">K1</div>
<div id="k2">K2</div>
<div id="k3">K3</div>
<div id="k4">K4</div>
<div id="k5">K5</div>
<div id="k6">K6</div>
<div id="k7">K7</div>
<div id="k8">K8</div>
最佳答案
当您将增量放在 if 条件之外时,如果 numbers
数组中已经存在一个数字,则它不会进入 if 条件,因此 div 永远不会填满。但是,由于您递增了 x
值,因此您继续前进到下一个 div。如果将 x
增量放在外面,当 if
中的条件不满足时,x
值保持不变,因此在下一次迭代中条件可能会通过或继续尝试。
执行流程
如果里面有increment
1) Generate random number.
2) Check in is already generated, if yes skip it. // you see ? when skip no increment happens, because the increment inside the the condition.
3) Generate again and go to step 2.
如果你有外部增量
1) Generate random number.
2) Check in is already generated, if yes skip it. Increase x value to next. //** you see ? incrementing no matter you skip it or not.
3) Generate again and go to step 2.
关于while循环中的Javascript if语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42338459/