这个函数是纯函数还是非纯函数?
function greet(name) {
return "Hi I'm " + name;
}
纯函数的特性是它没有副作用,并且对于相同的输入总是返回相同的输出。
在这里,它会产生副作用(返回一个字符串)。 字符串连接
"Hi, I'm " + name
引入了对外部状态的依赖。杂质是由“嗨,我是”组成的。
我们可以重写下面的代码,使其更加纯净。
//pure function
function pureGreet(greeting, name) {
return greeting + name;
}
//console output
const hiGreeting = "Hi, I'm ";
const actualGreeting = pureGreet(hiGreeting, "John");
console.log(actualGreeting);
这个解释正确吗?
不,这个解释不正确。
这里,它产生了副作用(返回一个字符串)
不,返回值不是副作用。这就是函数的作用。
字符串
"Hi I'm "
是一个常量,因此不会改变构成引用透明度的特征:
因此它是一个纯函数。
常数只是常数。你可以想象另一个总是在输入上加 2 的函数:
function add2(i) {
return 2 + i;
}
这也是纯粹的,因为
2
是一个常数。 add2(2)
始终返回 4
,add2(3)
始终返回 5
,依此类推。