为什么 currying 函数在 javascript 中的工作方式与这种情况下的正常函数不同?

Why currying function works different from normal function in javascript for this case?

我创建了一个生成器。 运行 代码,

最后的部分是这样写的

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);

但是,它运行 代码不正确。这是为什么? 阅读此处和其他来源的帖子后,解释似乎是 柯里化函数只是对我表示函数的另一种方式。

但是这一次,我才发现原来不是这样,有很大的不同。 谁能告诉我区别?

每次你调用 gen() 你 return 一个新的 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()());