当我学习 thunk 时,我认为它们就像函数柯里化(Currying)。为什么叫thunk?
重击
function add(x, y){
return x + y
}
function thunk() {
return add(10, 20)
}
函数柯里化(Currying)
function multiply(a, b, c) {
return a * b * c;
}
function multiply(a) {
return (b) => {
return (c) => {
return a * b * c
}
}
}
最佳答案
不,它们完全不同。
但是,thunk
和 currying
在函数式编程
中都有应用。
谢谢
Thunk 是一种用于延迟计算的函数式编程
技术。
这在 redux
环境中对我们有很大帮助。
那么,当我们调度
一个 Action 时想要延迟计算时,我们该怎么办?
我们使用 thunks 作为中间件。
很简单
export default function thunkMiddleware({ dispatch, getState }) {
return next => action =>
typeof action === 'function' ?
action(dispatch, getState) :
next(action);
}
这主要是 redux-thunk
中 thunk
的实现。
它基本上只是检查 dispatched
操作是否是一个函数,如果不是,它就按原样传递它。
您可以阅读核心实现here 。只有 14 行。
柯里化(Currying)
柯里化(Currying)是将一个有 n 个参数的函数转换为 n 个函数,每个函数只有一个参数。
例如,如果我们有一个带有三个参数 a、b 和 c 的函数
let result = fn(a,b,c)
当我们对其应用柯里化(Currying)时,它就变成了
let applyCurrying = curriedFn(fn);
let result = applyCurrying(a)(b)(c);
curredFn 的简单实现:
const curriedFn = a => b => c => ( do compuation with a,b,c );
在柯里化(Currying)中,每个函数只接受一个参数。
关于javascript - thunk 和函数柯里化(Currying)相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61584833/