Просто столкнулся с чем-то интересным в Javascript, экспериментируя с генерированием случайного числа в условии (это то, что он называется?) Цикла for.Javascript - Math.random in a for loop
Так что, если бы я должен был написать код так:
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 (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
Что именно происходит здесь? Это немного смутило меня. Является ли Math.random() внутри цикла for созданием нового случайного числа после каждой итерации? Проводят ли цикл код, повторяют и проверяют условие и генерируют новое случайное число каждый раз, когда он проверяет условие? Это то, что происходит, и поэтому номера в консоли меньше, чем если я использую Math.random() в переменной перед циклом for?
'j
Да , условие завершения цикла (включая любые вызовы функций, которые оно делает) заново инициализируется перед каждой итерацией. – Thilo