为什么 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()());
我创建了一个生成器。 运行 代码,
最后的部分是这样写的
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()());