Почему функция карри в этом случае отличается от обычной функции в javascript? - PullRequest
0 голосов
/ 23 марта 2020

Я создал генератор. чтобы запустить код,

Последняя часть написана таким образом.

const genratorAnimation = gen(); 

let result = genratorAnimation.next();
genratorAnimation.next();

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

Я пытался запустить это с использованием функции без каррирования, как.

let result = gen().next();
gen().next();

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

Тем не менее, он не выполняет код должным образом. Это почему? После прочтения сообщений здесь и других источников, объяснение кажется, что функция каррирования - это просто еще один способ представления функций для меня.

Но на этот раз я понял, что это не имеет огромной разницы. Кто-нибудь может дать мне знать разницу?

1 Ответ

1 голос
/ 23 марта 2020

Каждый раз, когда вы звоните gen(), вы возвращаете новый Generator, поэтому вы постоянно его инициализируете. Вот почему ваш код не работает при использовании второй версии.

Ваш пример может быть обобщен следующим образом:

const add = function () {
  var counter = 0;
  return function () { counter += 1; return counter; }
};

const count = add();

// Works
console.log('Works');
console.log(count());
console.log(count());
console.log(count());

//Doesn't work
console.log('Doesn\'t work');
console.log(add()());
console.log(add()());
console.log(add()());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...