函数式编程

函数式编程的主要设计点在于避免使用状态和可变的数据,即 stateless and immutable。
RXJS:响应式编程抽象出了流这个概念,提高了代码的抽象级别,我们不用去关心大量的实现细节,而专注于对数据流的操作。

目录

参考

mutable & immutable

纯函数

redux状态管理方案


参考

https://www.imooc.com/article/70323 (主要看前面的关于编程思想的解说)

https://www.jianshu.com/p/3cf03ae2eac1 

https://juejin.im/entry/5adcc57bf265da0ba469613f

mutable & immutable

JS 中的对象是 mutable 可变的,新对象引用了原始对象,改变新对象将影响到原始对象。mutable data的数据结构有耦合,造成了数据难以被回溯的隐患。为了解决这个问题,一般的做法是使用 shallowCopy(浅拷贝)或 deepCopy(深拷贝)来避免被修改,但这样做造成了 CPU 和内存的浪费。immutable 可以很好地解决这些问题。

immutable Data 就是一旦创建,就不能再被更改的数据。对 immutable 对象的任何修改或添加删除操作都会返回一个新的 immutable 对象。immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。

数据不可变就是指这个数据一旦产生,它的值就永远不会变。JavaScript 中字符串类型和数字类型就是不可改变的,而对象基本都是可变的,可能会带来各种副作用。

纯函数

纯函数指的是执行结果由输入参数决定,参数相同时结果相同,不受其他数据影响,并且不会带来副作用(Side Effect)的函数。副作用指的是函数做了和本身运算返回值没有关系的事情,如修改外部变量或传入的参数对象,甚至是执行 console.log 都算是 Side Effect。前端中常见的副作用有发送 http 请求、操作 DOM、调用 alert 或者 confirm 函数等。满足纯函数的特性也叫做引用透明度(Referential Transparency)。 

redux状态管理方案

Redux 不允许对数据层进行修改,只允许你通过一个 Action 对象来描述需要做的变更。在 Redux 中使用一个纯函数接收原 state treeaction 作为参数,并生成一个新的 state tree 代替原来的。

  • State(状态) 是指单一不可变数据
  • Action(行为) 描述状态的变化
  • Reducer(归约器/归约函数) 根据先前状态以及当前行为来计算出新的状态。纯函数。
  • 显性定义的Action触发Reducer产生新的状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值