почему я устанавливаю переменную для генератора после установки переменной для генератора снова? (Этот случай отличается от обычных примеров генератора) - PullRequest
0 голосов
/ 26 марта 2020

После установки переменной для генератора, например, let gene = generator ();

Обычно мне нужно выполнить gene.next () для итерации созданного выше генератора. Однако в приведенном ниже примере (полный код см. По ссылке)

https://codepen.io/jotnajoa/pen/MWwzpJJ

другая переменная устанавливается после установки переменной для генератор снова. Я не знаю, почему это происходит. Кроме того, я не получаю часть

let result = genratorAnimation.next();
//genratorAnimation.next();
let interval = setInterval(function(){
   if(!result.done) {
     genratorAnimation.next();
   }
   else {
    clearInterval(interval)
   }
}, 50);

В конце этого кода. Потому что, насколько я понимаю, генератор возвращает «true» для «done», когда все получено.

Однако в этом примере он делает противоположное. "not result.done", который является ложным при запуске генератора.

Почему это так?

В качестве сводки,

1), почему мне нужно установить другая переменная для интервала.

Я предположил, что setInterval (########) достаточно вместо xxx = setInterval для запуска l oop. потому что, если я установлю переменную для setInterval, ничего не произойдет, пока я не введу переменную 'xxx'. Но в этом коде он работает, даже если я не вызываю переменную.

2) Почему! Result.done заставляет l oop играть. потому что! result.done имеет значение false, и если false находится в операторе if, все идет после if, если он не будет выполнен.

Если оператор выполняется только тогда, когда условие истинно. Не так ли?

Заранее спасибо.

1 Ответ

2 голосов
/ 26 марта 2020

почему мне нужно установить другую переменную для интервала.

setInterval () используется для многократного вызова функции или выполнения фрагмента кода с фиксированная задержка между каждым вызовом. это означает, что функция, предоставленная функции setInterval(), будет вызываться и выполняться вечно, если ее не остановить, вызвав функцию clearInterval () .

clearInterval () требует ссылку на интервал (переменную) , в этом фрагменте мы можем иметь код без очистки интервала, но он будет продолжать работать и потреблять ресурсы памяти / ЦП без эффекта в конце, поэтому лучше удалить его из очереди выполнения.

Почему! Result.done заставляет l oop играть.

Функция генератора будет возвращать result.done как false до тех пор, пока не вернется ее последний результат, она вернет true: и ! (логическое НЕ) используется для отрицания значения Boolean , поэтому, если result.done имеет значение false, !result.done отрицает его и делает его true. То, как оно написано в вашем фрагменте кода, зависит от стиля кодирования, который можно записать так:

let result = genratorAnimation.next();
//genratorAnimation.next();
let interval = setInterval(function(){
   if(result.done) {
     clearInterval(interval);
   }
   else {
    genratorAnimation.next();
   }
}, 50);
...