纯函数
晦涩的定义是这样的:一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用;
总共2点:
- 结果只依赖参数
- 执行过程中没有副作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| const a = 1 const foo = (b) => a + b foo(2)
const a = 1 const foo = (x, b) => x + b foo(1, 2)
const a = 1 const foo = (obj, b) => { return obj.x + b } const counter = { x: 1 } foo(counter, 2) counter.x
const a = 1 const foo = (obj, b) => { obj.x = 2 return obj.x + b } const counter = { x: 1 } foo(counter, 2) counter.x
const foo = (b) => { const obj = { x: 1 } obj.x = 2 return obj.x + b }
|
分析
1、demo1: 不是。 因为函数结果还依赖了外部变量a
2、demo2: 是。
3、demo3: 是。 只依赖入参,不产生副作用
4、demo4: 不是。 产生副作用。修改了obj.x的值
5、demo5: 是。 对内部变量obj的修改,外部程序不可见,无副作用
- 副作用都包含哪些?
1、调用 DOM API 修改页面;
2、发送了 Ajax 请求;
3、调用 window.reload 刷新浏览器;
4、甚至是 console.log 往控制台打印数据;