Объясните как работает следующий код (JS)

function random(){
var already_used = [];
return function() {
    var new_num = Math.floor(Math.random() * 100 + 1);
    **for (var i = 0; i < already_used.length; i++) {
        if (already_used[i] == new_num) *{return}*
    };**

    parag.innerHTML += new_num+', ';
    already_used.push(new_num);
    }
}

Ответы (1 шт):

Автор решения: vsemozhebuty
  • random() — это функция, которая возвращает другую функцию, генерирующую случайное число. Также она содержит в себе массив already_used, в котором хранятся результаты предыдущих генераций для предотвращения повторений. Данная техника иллюстрирует использование замыканий.

  • Результат вызова random() можно сохранить в переменную и вызывать как функцию. Ниже приведён пример использования такой возвращённой функции при помощи переменной addRandom: она привязана к щелчку кнопки как обработчик события.

  • Каждый вызов addRandom() геренирует случайное число. Затем в цикле перебираются все прежние случайные числа, сохранённые в массиве. Если совпадение найдено, функция просто завершает работу. Это завершение и производится при помощи {return} — оно ничего не возвращает, просто обрывает выполнение функции. В этом случае нажатие на кнопку не производит никакого действия.

  • Если совпадения нет, функция добавляет текущее случайное число в некий HTML элемент через запятую, а потом заносит число в массив для будущих проверок.

function random(){
  var already_used = [];
  return function() {
    var new_num = Math.floor(Math.random() * 100 + 1);
    for (var i = 0; i < already_used.length; i++) {
        if (already_used[i] == new_num) {return}
    };

    parag.innerHTML += new_num+', ';
    already_used.push(new_num);
  }
}

const addRandom = random();

mybutton.addEventListener('click', addRandom);
<button id='mybutton'>Add random</button>

<div id='parag'></div>

→ Ссылка