Есть несколько способов сделать это. Наиболее очевидным является изменение вашего вызова на guessedCorrect()
, чтобы явно передать его:
setTimeout(() => { guessedCorrect(cool); }, 5000);
Конечно, это будет означать, что вам нужно будет изменить определение guessedCorrect()
, чтобы приспособить входящий аргумент, т. Е .:
function guessedCorrect(cool) { //...
Это имеет преимущество в том, что не ссылается на функцию по имени строки. Как говорит @Shahzad, это приведет к поломке вашего кода при минификации, так как минификация не меняет строк. Лучше использовать ссылки на функции, поэтому:
setTimeout(guessedCorrect, 5000);
Кроме того, ваш повторяющийся блог if/else if
может быть значительно уменьшен при использовании блока switch()
или даже объекта в качестве карты значений в цветах.
[EDIT]
В ответ на ваш более поздний комментарий:
this
- это контекст, в котором выполняется текущее закрытие. Контекст по умолчанию, то есть до тех пор, пока что-то его не изменит, - window
. Часто контекст устанавливается автоматически, например, в обратных вызовах событий, где this
указывает на инициирующий элемент. Но в вашем случае мы могли бы (хотя это был бы довольно странный подход) придумать this
, чтобы указать на значение cool
, поэтому:
setTimeout(guessedCorrect.bind(cool), 5000);
После этого вызов this
внутри guessedCorrect()
вернет значение cool
, существовавшее при вызове функции.