redux源码分析:什么是副作用(SideEffect)
前端开发中经常提到的副作用是什么
定义
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/