redux源码分析:什么是副作用(SideEffect)

前端开发中经常提到的副作用是什么
更新于: 2021-12-19 12:57:28

定义

Side Effect是指一个function做了跟本身运算返回值没有关系的事,比如说修改某个全局变数,或是修改传入参数的值,甚至是执行console.log都算是Side Effect。

无副作用(纯函数)

var arr = [1, 2, 3, 4, 5];

arr.splice(0, 3); // [1, 2, 3]
arr.splice(0, 3); // [4, 5]
arr.slice(0, 3); // []

有副作用(具有破坏性)

var arr = [1, 2, 3, 4, 5];

arr.slice(0, 3); // [1, 2, 3]
arr.slice(0, 3); // [1, 2, 3]
arr.slice(0, 3); // [1, 2, 3]

 

其它常见副作用(并非全部)

  • 發送 http request(ajax/fetch/websocket)
  • 在畫面印出值或是 log(console.log)
  • 獲得使用者 input
  • Query DOM 物件
  • 文件操作

类比 Ruby 语言

str = 'abcde';

# 无副作用操作: str 值为 "abcde",没有变化
str.slice(0,2)
puts str

# 有副作用操作: str 值为 "cdef",已经被修改
str.slice!(0,2)

参考

https://blog.jerry-hong.com/series/rxjs/thirty-days-RxJS-02/