什么是纯函数
- 返回结果只依赖它的参数
- 函数执行过程中没有副作用
什么是返回结果只依赖参数呢
var a = 1;
function num(b){ return a+b};
上面的函数不是纯函数因为它依赖外部变量,所以它不是纯函数
function num(a, b) {return a + b}
上面的函数就是纯函数,因为它的返回值只依赖它的参数
函数执行过程中没有副作用
const a = 1;
const foo = (obj, b) => {
return obj.x + b;
}
const counter = {x: 1};
foo(couter, 2);
counter.x // 1
从上面我们可以看出来counter对象中的x属性并没有改变,所以这个函数执行没有产生副作用
const foo = (obj, b){
obj.x = 2;
return obj.x + b;
}
const counter = {x: 1};
foo(counter, 2);
counter.x //2
从上面可以看出这个函数在执行的过程中改变了counter中x的属性,所以这个函数不是纯函数
如果在函数内创建的对象然后改变,这个没有影响外部的变量,所以这样就是纯函数