首页 > 解决方案 > JavaScript 中的 Thunk 和 currying 有什么区别?

问题描述

对于柯里化,如果我们有这样的函数:

function multiply(x, y){
  return x * y;
}

multiply(3, 5); // 15

那么它的柯里化版本是:

function curriedMultiply(x) {
  return function(y) {
    return x * y;
  }
}
curriedMultiply(3)(5);  // 15

对于 Thunk,如果我们有这样的函数(在 Nodejs 中):

let fs = require('fs')
fs.readFile(fileName,callback)

那么它的 Thunk 版本是:

let thunkify = require('thunkify')
let read = thunkify(fs.readFile)
read(fileName)(callback)

看起来thunk和currying有关?它们都将多参数函数变成了单参数函数。而这个单参数函数将返回另一个函数,该函数采用原始的第二个参数,然后返回最终结果。但是我注意 thunk 只将回调作为第二个参数,而对于 currying,accepeted 参数的类型没有限制。

那么,thunk 是柯里化的特例之一吗?

标签: javascriptcurryingthunk

解决方案


推荐阅读