Javascript thunk和闭包之间的区别

Javascript thunk和闭包之间的区别,javascript,Javascript,我以为我知道什么是结束,但我不太确定是否读了周围的一些文章 函数是否在“thunk”下面? (对我来说,这是一个结束,我从一篇关于react的博客文章中获取了这一信息) 作者解释说:“接下来,让我们看一下ruleRunner函数。ruleRunner是一个thunk,或者是一个返回函数的函数。” 相反,我认为thunk是“一个包含未来执行某种逻辑所需的所有上下文(状态、函数等)的函数。” 所以对我来说,第一篇文章的作者是错误的,他给出了一个闭包的描述和例子,而不是一个恶作剧。但我可能错了,这就是

我以为我知道什么是结束,但我不太确定是否读了周围的一些文章

函数是否在“thunk”下面? (对我来说,这是一个结束,我从一篇关于react的博客文章中获取了这一信息)

作者解释说:“接下来,让我们看一下ruleRunner函数。ruleRunner是一个thunk,或者是一个返回函数的函数。”

相反,我认为thunk是“一个包含未来执行某种逻辑所需的所有上下文(状态、函数等)的函数。”

所以对我来说,第一篇文章的作者是错误的,他给出了一个闭包的描述和例子,而不是一个恶作剧。但我可能错了,这就是我问这个问题的原因

第一篇文章的作者关于什么是thunk是错误的吗?如果说thunk是一种特殊的闭包,“它包含了将来执行某种逻辑所需的所有上下文(状态、函数等)”是否正确

ruleRunner是thunk或返回函数的函数

不,那是垃圾。返回函数的函数称为。返回的函数通常是一个

我认为thunk是“一个包含所有上下文(状态、函数等)的函数,它将在将来执行某种逻辑。”

是的,听起来很合理。这类似于闭包,但是闭包通常需要一些进一步的参数,而闭包则不需要——它只需要开始执行

闭包是引用独立(自由)变量(本地使用但在封闭范围内定义的变量)的函数。换句话说,这些函数“记住”创建它们的环境

从本质上讲,闭包是一个代码块,可以在以后执行,但它维护了它最初创建的环境,因此被包含在该范围内。 thunk是一个子例程,通常是自动创建的,用于协助调用另一个子例程,因此thunk可以是闭包,但并非所有thunk都是闭包

Thunk是简而言之的助手函数,可以局部或全局封闭,而闭包仅局部绑定到其初始化的作用域


thunk就像一个无参数闭包,它在以后的某个时间基本上按需运行函数,它不“思考”,因为它没有要处理的参数,本质上是“thunk”。我想正式地说,作者错了,这不是一个恶作剧。这是一个结束。但我不确定在Redux的背景下,你是从哪里引用的?
export const ruleRunner = (field, name, ...validations) => {
  return (state) => {
    for (let v  of validations) {
      let errorMessageFunc = v(state[field], state);
      if (errorMessageFunc) {
        return {[field]: errorMessageFunc(name)};
      }
    }
    return null;
  };
};
const add = (x,y) => x + y;

const thunk = () => add(1,2);

thunk() // 3