函数式编程思维的目标:程序执行时,应该把程序对结果以外的数据的影响控制到最小。
副作用
副作用(Side Effect)的主体是一个“过程”,即我们在命令式编程中提到的函数、方法等。副作用指这个“过程”运行后,不只是对传入值操作产生传出值,还对这两个值以外的部分产生了影响。
react hooks
在类组件中,我们使用成员方法带来配置型声明式的编码风格,Hooks 的设计思想是使用升级版的函数式组件,以更清晰的过程来厘清事件流转。这也是我认为 React 使用 Hooks 后的理想方向。ReactHooks 的官方介绍中提到了 Hooks 的“动机”,其中包含组件之间复用状态逻辑的便捷化、复杂组件易理解程度等内容。React 在类组件非常成熟的情况下推动这些特性,是为了实现 React 事件流的清晰化。
useState
// 申明变量_state、生成标记
// 申明两个方法,分别对应useState所在函数组件和它被调用镶嵌的位置
const _state = [], _genIndex = 0;
const reRenderThisComponet = (state, contextCptFunc) => contextCptFunc(state)
const componetAnchorPosition = contextCptFunc => getCptParentPosition(contextCptFunc)
function useState (initialState, contextCptFunc) {
const currentIndex = _genIndex;
if (_state[currentIndex] === undefined) { _state[currentIndex] = initialState }
const setState = newState => {
_state[currentIndex] = newState;
// 在外层重新render调用state的组件, 虚拟调用
ReactDOM.render(reRenderThisComponet(_state, contextCptFunc),
componetAnchorPosition);
_genIndex = 0;
}
_genIndex += 1;
return [_state[currentIndex], setState];
}React Hooks 的意义更多是承担函数组件之间的衔接和调用作用。
柯里化函数
Point-Free
函数式编程中有一种Point-Free风格,可以理解成无参调用。
可以让我们只关心入参和出参,不关心数据流动过程

纯函数
Pure 纯函数,无副作用:任意时刻以相同参数调用函数任意次数得到的结果都一样。
惰性计算
惰性计算的含义就是在真正调用到的时候才执行,中间步骤不真实执行程序。这样可以让我们在运行时创建很多基础函数,但并不影响实际业务运行速度,唯有业务代码真实调用时才产生开销。