Можешь объяснить, как работают генератор-функции в JavaScript, включая то, как ключевое слово `yield` приостанавливает выполнение и как метод `.next()` возобновляет работу и извлекает значения из генератора? — ДейлиПреп