JSFiddle - React, Tailwind, and code Playground

HTML

<p>
здесь можно поиграть в виселицу
</p>

JavaScript

var words = [
  "переменная",
  "ромашка",
  "загадка",
  "клавиатура",
  "водопад",
  "серобуромалиновый",
  "ночь"
];
var word = words[Math.floor(Math.random() * words.length)];
var answerArray = [];
for (var i = 0; i < word.length; i++) {
  answerArray[i] = "_";                         // ЭТОТ КОД ПОВТОРИТ НИЖНЕЕ ПОДЧ. СТОЛЬКО РАЗ, СКОЛЬКО БУКВ В СЛОВЕ (i++)
}
 var remainingLetters = word.length;

 while (remainingLetters > 0) {  // ПОКА ОСТАВШИХСЯ БУКВ БОЛЬШЕ НУЛЯ,
   alert(answerArray.join(" ")); // ПОКАЖИ СЛОВО НИЖНИМ ПОДЧЁРКИВАНИЕМ С РАЗДЕЛИТЕЛЕМ-ПРОБЕЛОМ
   var guess = prompt("Введите букву").toLowerCase(); // ПОТОМ ЗАПРОСИ У ПОЛЬЗОВАТЕЛЯ БУКВУ
   if (guess === null) {  // ЕСЛИ ПОЛЬЗОВАТЕЛЬ НАЖАЛ ОТМЕНА,
     break; // ТО ВЫЙДИ ИЗ ИГРЫ
   }
   else if (guess.length !== 1) { // ЕСЛИ ПОЛЬЗОВАТЕЛЬ ВВЁЛ НЕ ОДНУ БУКВУ
     alert("Пожалуйста, введите только одну букву"); // ПОКАЖИ ЭТО
   }
   else { // ИНАЧЕ
     for (var j = 0; j < word.length; j++) { // ПОКА J = 0, J < КОЛ-ВО БУКВ В СЛОВЕ
       if (word[j] === guess) { //ЕСЛИ ПЕРВАЯ/ВТОРАЯ(J) БУКВА ПЕРЕМЕННОЙ WORD - ТО, ЧТО ВВЁЛ ПОЛЬЗОВАТЕЛЬ,
         answerArray[j] = guess; // ТО ПРИСВОЙ НОМЕРУ БУКВЫ(J) ЗНАЧЕНИЕ GUESS
         remainingLetters--; // И УМЕНЬШИ ОСТАВШИЕСЯ БУКВЫ НА 1
       }
     }
   }
 } // КОНЕЦ ИГРОВОГО ЦИКЛА
 alert(answerArray.join(" "));
 alert('Отлично! Было загадано слово "' + word + '"');