javascript – thunk和闭包之间的区别

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

功能是否低于“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;
  };
};

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

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

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

thunk() // 3

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

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

解决方法

“ruleRunner is a thunk,or a function that returns a function.”

不,那是垃圾.返回函数函数称为higher-order function.返回的函数通常为closure.

I thought a thunk was “a function that contains all of the context (state,functions,etc) it will need in order to carry out some sort of logic in the future.”

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

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...