lovelmh13 / myBlog

个人博客 记录菜狗的学习之路
6 stars 0 forks source link

纯函数和副作用 #176

Open lovelmh13 opened 2 years ago

lovelmh13 commented 2 years ago

纯函数

纯函数是指:相同的输入永远会得到相同的输出,并且没有任何可观察的副作用。类似 y=f(x)

lodash 就是纯函数库

纯函数和不纯函数的例子: slice 和 splice slice 返回数组指定的部分,不改变原函数 splice 是对数据进行操作返回该数组,改变原函数

纯函数的好处:

  1. 可缓存 因为相同的输入永远会得到相同的输出,所以可以把结果缓存起来
  2. 可测试 让测试更方便
  3. 并行处理 在多线程环境下并行操作共享的内存可能会出现意外情况 纯函数不需要访问共享数据内存,所以在并行环境下可以任意运行纯函数(web worker)

    副作用

    副作用让一个函数变得不纯,如果函数依赖外部的状态就无法保证相同的输入永远会得到相同的输出,就会带来副作用。

函数不会影响到与他无关的变量或者函数 (不会改变给外界的变量赋值)

函数或者表达式修改了它的 scope 之外的状态 函数或者表达式除了返回语句外还与外部世界或者它所调用的函数有明显的交互行为

可以查看:Effect Hook

vue 的 computed 也不允许有副作用(只能 return, 不能直接去修改值)

没有副作用是说,除了变量定义的时候给出的初始值之外,其他表达式不会改变任何变量的值/程序运行的状态。一个函数/表达式的结果仅仅体现在其输入参数和返回值上,输入的参数相同,则返回值相同。除了用函数得到这个返回值之外,函数不会再有其他任何的作用。

像 js(除了haskell之外几乎所有的语言) 这种,满满的都是副作用呀,比如赋值语句呀,dom操作呀,都是。