纯函数的概念:一个函数的返回结果只依赖其参数,并且执行过程中没有副作用。
下面我们来分别说明一下概念中的两个条件。
返回结果只依赖其参数
返回值只和函数参数有关,与外部无关。无论外部发生什么样的变化,函数的返回值都不会改变。
// 非纯函数 返回值与a相关,无法预料 const a = 1 const foo = (b) => a + b foo(2) // => 3 // 纯函数 返回结果只依赖于它的参数 x 和 b,foo(1, 2) 永远是 3。今天是 3,明天也是 3,在服务器跑是 3,在客户端跑也 3,不管你外部发生了什么变化,foo(1, 2) 永远是 3。只要 foo 代码不改变,你传入的参数是确定的,那么 foo(1, 2) 的值永远是可预料的。 const a = 1 const foo = (x, b) => x + b foo(1, 2) // => 3
函数执行过程中没有副作用
// 无副作用 const a = 1 const foo = (obj, b) => { return obj.x + b } const counter = { x: 1 } foo(counter, 2) // => 3 counter.x // => 1 // 修改一下 ,再观察(修改了外部变量,产生了副作用。) 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
当然,如果实在函数内部创建的变量。进行修改则不会产生副作用。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229331.html原文链接:https://javaforall.net
