JS中的纯函数

197 阅读1分钟

纯函数

晦涩的定义是这样的:一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用;

总共2点:

  1. 结果只依赖参数
  2. 执行过程中没有副作用
// demo1
const a = 1
const foo = (b) => a + b
foo(2) // => 3


// demo2
const a = 1
const foo = (x, b) => x + b
foo(1, 2) // => 3


// demo3
const a = 1
const foo = (obj, b) => {
  return obj.x + b
}
const counter = { x: 1 }
foo(counter, 2) // => 3
counter.x // => 1


// demo4 
const a = 1
const foo = (obj, b) => {
  obj.x = 2
  return obj.x + b
}
const counter = { x: 1 }
foo(counter, 2) // => 4
counter.x // => 2

// demo5
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 往控制台打印数据;