thunk和闭包之间的区别

Fra*_*ard 8 javascript

我以为我知道什么是关闭,但我不太确定阅读一些文章反应.

功能是否低于"thunk"?(对我而言,这是一个关闭,我从一篇关于反应https://spin.atomicobject.com/2016/10/05/form-validation-react/的博客文章中看到了这一点)

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

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;
  };
};
Run Code Online (Sandbox Code Playgroud)

相反,我认为thunk是一个包含所有上下文(状态,函数等)的函数,以便在将来执行某种逻辑." 来自:http://www.austinstory.com/what-is-a-thunk-in-javascript/

const add = (x,y) => x + y;

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

thunk() // 3
Run Code Online (Sandbox Code Playgroud)

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

第一篇文章作者是错误的什么是thunk,并且说thunk是一种特定类型的闭包是"正确的",它包含了为了执行某种类型而需要的所有上下文(状态,函数等)未来的逻辑."

Ber*_*rgi 5

“ ruleRunner是一个重击,或者是一个返回函数的函数。”

不,那是垃圾。返回函数的函数称为高阶函数。在返回的功能往往是一个封闭

我认为一个笨拙的东西是“一个包含将来为了执行某种逻辑所需要的所有上下文(状态,函数等)的函数”。

是的,听起来很合理。这类似于闭包,但是闭包通常需要一些其他参数,而thunk则不需要-只需开始执行即可。