在Redux教程中,他们大量使用数组扩展运算符来编写化简器(必须是纯函数)。执行以下脚本。
let a = {
b : "ddff",
c : "adxas"
}
let c = {
b : "ssdds",
c : "asdxasdsad"
}
let d = [];
d.push(a);
d.push(c);
console.log(d);
const pureFunc = (arr,b,c) => {
return [...arr, { b , c}];
}
let n = pureFunc(d,"daaaa","sdadad");
console.log(n);
d[0].b = "Hello";
console.log(n)
函数"pureFunc"是一个适当的纯函数。数组 d 上的突变正在对象 n 中反映出来。
是的,pureFunc
是纯粹的。突变不会发生在pureFunc
内。
最常见和最基本的纯函数之一是恒等函数:
let identity = x => x;
因此,如果我们传递一个对象,我们将返回相同的对象。我们可以在事后修改它,但这并不能使identity
不纯,因为identity
没有进行突变。
基本上,纯函数只需要满足两个要求:
- 在给定相同的输入的情况下,它们总是产生相同的输出
- 它们不会引起副作用