纯函数就是一个函数,只不过具备一些特点,你可能平时开发中都有用到,只是没有意识到这是一个纯函数。
纯函数(Prue function)具备以下特点:
- 纯函数每一次调用时传入同样的参数,返回的都是同样的后果;它不会扭转参数的值,也不会扭转内部变量的值;它不会依赖于内部的变量,仅依赖于你传入的参数;
- 纯函数没有其余副作用(side effect)
- 如果你每次传入的参数一样,然而返回的后果不一样,则不是一个纯函数
Just show me the code:
这 是一个纯函数:
/*
它承受两个参数:一个数组和一个要增加的项
而后依据这两个参数,返回一个新的数组
它没有扭转原来参数的值
每次调用时传递雷同的值,返回的后果永远一样
它没有批改内部的变量和数据
*/
let array = [1, 2, 3];
function addItemToArray(array, item) {return [...array, item];
}
addItemToArray(array, 4);
这 不是 一个纯函数
/*
这个函数 return 的值是一个数组
这个数组是在原来的数组 array 的根底上,追加了一项
它扭转了内部变量
每次执行函数时传入同样的值,返回的后果不雷同
所以它不是纯函数
*/
let array = [1, 2, 3];
function addItemToArray(array, item) {return array.push(item);
}
addItemToArray(array, 4);
这 是一个纯函数:
/*
它没有扭转内部变量的值
每次调用时如果传递的值雷同,那每次返回的后果也雷同
*/
let a = 1;
let b = 2;
function add(x, y) {return x + y;}
add(a, b);
这 不是 一个纯函数:
/*
它扭转了内部变量的值
每次返回的后果都不一样。*/
let a = 1;
function add(x, y) {return x += y;}
add(a, 2);
纯函数的长处:
纯函数使代码更牢靠,可利于测试与保护,在开发中应该尽可能多地应用纯函数。
哪些状况不实用纯函数:
- 网络申请:依据网络申请返回不同的数据
- 其余须要扭转内部变量的函数