简单来说,thunk 和高阶函数有什么区别?
In simple terms, what's the difference between a thunk and a Higher Order Function?
我知道这两个函数都是 return 函数。
到目前为止,我使用 thunk 的经验是将它们用于 return 函数,而不仅仅是操作对象,这样我就可以在 Redux
.
中处理异步请求
闭包是高阶函数 (HOF) 的实现,目的是为私有变量创建一个新的作用域……对吧? HOF 的其他示例包括 map
、reduce
和 filter
.
是否还有其他明确定义两者之间区别的内容?
谢谢。
Thunk 是函数包装表达式以延迟它们的评估。
这个延迟是在 Redux thunk a 中实现的,当一个动作被调用时它 returns 一个函数。稍后可以调用返回的这个函数。
这是一个 thunk 动作的例子。
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
高阶函数只是一个 returns 函数或将函数作为其参数之一的函数。因为此函数 returns 另一个将分派作为参数的函数,所以这是高阶函数的示例。
redux thunk 中间件的代码类似于这样
function createThunkMiddleware() {
return store => next => action => {
if (typeof action === 'function') {
// since action is a function it is a thunk action creator
// so call it with store methods
return action(store.dispatch, store.getState);
}
// action is not a function so redux thunk ignores it
return next(action);
};
}
一旦我们的 thunk 动作创建器被调用,它就会通过中间件链发送动作函数。当它到达我们的 thunk 中间件时,这个动作被识别为一个函数,因此使用商店的 dispatch 和 getState 方法再次调用。
由于第二次函数调用,我们现在处于 thunk 动作创建者返回函数的范围内。这意味着我们现在可以执行异步逻辑并且仍然可以访问商店的 getState 和 dispatch 方法。这就是为什么我们的 thunk 动作创建器可以被认为是一个 thunk 表达式。通过使用更高阶的函数,我们可以访问,但 推迟 商店的 dispatch 或 getState 方法的使用到未来的时间。如下所示,延迟一秒后调用增量操作。
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
I understand that both are functions that return functions
您的理解有些不正确
- Thunks 可以 return 任何类型的值——不仅仅是函数类型
- Higher-order functions 可以 return 任何类型的值——不仅仅是函数类型
My experience so far with thunks have been using them to return functions as opposed to just action objects so that I can work with async requests in Redux.
Thunk(和高阶函数,就此而言)与任何特定的库(React、Redux)或任何特定的控制流(同步、异步)没有本质上的关联。 thunk 只是一个空函数——它们有各种常见的用例,但最常用于延迟特定计算的评估。
A closure is an implementation of a High Order Function (HOF) in order to create a new scope for private variables...right? Other examples of HOFs include map, reduce and filter.
A closure不一定是高阶函数的实现。 function
关键字(和 =>
箭头函数语法)确实创建了一个闭包,它确实有一个新的(词法)作用域,是的。
Is there any thing else that explicitly defines a difference between the two?
是的。它们的相同之处:
- 它们都是函数
- 它们都可以 return 任何类型的值
它们有何不同:
- thunks 是 nullary 函数(它们不接受任何参数)
- 高阶函数接受一个函数作为参数and/orreturn一个函数
也许最关键的区别:
- 如果一个 thunk return 是一个函数,它 只能 被认为是一个高阶函数。
我知道这两个函数都是 return 函数。
到目前为止,我使用 thunk 的经验是将它们用于 return 函数,而不仅仅是操作对象,这样我就可以在 Redux
.
闭包是高阶函数 (HOF) 的实现,目的是为私有变量创建一个新的作用域……对吧? HOF 的其他示例包括 map
、reduce
和 filter
.
是否还有其他明确定义两者之间区别的内容?
谢谢。
Thunk 是函数包装表达式以延迟它们的评估。
这个延迟是在 Redux thunk a 中实现的,当一个动作被调用时它 returns 一个函数。稍后可以调用返回的这个函数。
这是一个 thunk 动作的例子。
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
高阶函数只是一个 returns 函数或将函数作为其参数之一的函数。因为此函数 returns 另一个将分派作为参数的函数,所以这是高阶函数的示例。
redux thunk 中间件的代码类似于这样
function createThunkMiddleware() {
return store => next => action => {
if (typeof action === 'function') {
// since action is a function it is a thunk action creator
// so call it with store methods
return action(store.dispatch, store.getState);
}
// action is not a function so redux thunk ignores it
return next(action);
};
}
一旦我们的 thunk 动作创建器被调用,它就会通过中间件链发送动作函数。当它到达我们的 thunk 中间件时,这个动作被识别为一个函数,因此使用商店的 dispatch 和 getState 方法再次调用。
由于第二次函数调用,我们现在处于 thunk 动作创建者返回函数的范围内。这意味着我们现在可以执行异步逻辑并且仍然可以访问商店的 getState 和 dispatch 方法。这就是为什么我们的 thunk 动作创建器可以被认为是一个 thunk 表达式。通过使用更高阶的函数,我们可以访问,但 推迟 商店的 dispatch 或 getState 方法的使用到未来的时间。如下所示,延迟一秒后调用增量操作。
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
I understand that both are functions that return functions
您的理解有些不正确
- Thunks 可以 return 任何类型的值——不仅仅是函数类型
- Higher-order functions 可以 return 任何类型的值——不仅仅是函数类型
My experience so far with thunks have been using them to return functions as opposed to just action objects so that I can work with async requests in Redux.
Thunk(和高阶函数,就此而言)与任何特定的库(React、Redux)或任何特定的控制流(同步、异步)没有本质上的关联。 thunk 只是一个空函数——它们有各种常见的用例,但最常用于延迟特定计算的评估。
A closure is an implementation of a High Order Function (HOF) in order to create a new scope for private variables...right? Other examples of HOFs include map, reduce and filter.
A closure不一定是高阶函数的实现。 function
关键字(和 =>
箭头函数语法)确实创建了一个闭包,它确实有一个新的(词法)作用域,是的。
Is there any thing else that explicitly defines a difference between the two?
是的。它们的相同之处:
- 它们都是函数
- 它们都可以 return 任何类型的值
它们有何不同:
- thunks 是 nullary 函数(它们不接受任何参数)
- 高阶函数接受一个函数作为参数and/orreturn一个函数
也许最关键的区别:
- 如果一个 thunk return 是一个函数,它 只能 被认为是一个高阶函数。