Как заголовок. Я пробовал следующий javascript.
Это вызовет console.info () одно и то же случайное число 20 раз, но как мне найти 20 случайных символов? Используем ли мы функцию обратного вызова?
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var insert = letters.charAt(Math.floor(Math.random() * letters.length));
var str = "0";
for (i = 0; i < 20; i++) {
setTimeout(function() {
var newStr = str.replace(/./, insert);
console.info(newStr)
}, 50 * i)
}


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Эта строка:
var insert = letters.charAt( Math.floor(Math.random()*letters.length) );
выполняется один раз и только один раз. Он не запускает случайную часть заново каждый раз, когда вы запрашиваете значение insert.
Вы можете повторно запускать его вручную в каждом цикле:
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var str = "0";
for(i=0; i<20; i++) {
setTimeout(function(){
var insert = letters.charAt( Math.floor(Math.random()*letters.length) );
var newStr = str.replace(/./, insert);
console.info(newStr)
}, 50*i)
}Но имейте в виду, что вы можете получить один и тот же символ более одного раза, поскольку по определению он (псевдо) случайный - и, следовательно, вы можете выбрать тот же символ, который был выбран ранее.
Чтобы гарантировать получение случайного символа отчетливый каждый раз, вам придется удалить выбранный символ из списка. Проще сделать, преобразовав символы в массив и используя splice, чтобы удалить его после выбора:
var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split("");
var str = "0";
for(i=0; i<20; i++) {
setTimeout(function(){
var insert = Math.floor(Math.random()*letters.length);
var newStr = str.replace(/./, letters[insert]);
console.info(newStr)
letters.splice(insert,1);
}, 50*i)
}
Ух ... Понятно, такой глупый вопрос. Эта псевдослучайная строка могла бы служить цели. Большое спасибо за помощь!