JavaScript 中的纯函数
纯函数是一个函数(代码块),如果传递相同的参数,它总是返回相同的结果。它不依赖于任何状态,也不依赖于程序执行期间的数据变化,而只依赖于其输入参数。
此外,纯函数不会产生任何可观察到的副作用,例如网络请求或数据突变等。
让我们看看下面的 JavaScript函数:
function calculateGST( productPrice ) {
return productPrice * 0.05;
}
如果我们传递相同的 productPrice,上述函数将始终返回相同的结果。换句话说,它的输出不受任何其他值/状态变化的影响。所以我们可以将“calculateGST”函数称为纯函数。
现在,让我们看看下面的另一个函数:
var tax = 20;
function calculateGST( productPrice ) {
return productPrice * (tax / 100) + productPrice;
}
稍等片刻,你能猜出上面的函数是不是纯函数吗?
耶耶!你说的对!它不是一个纯函数,因为输出取决于外部变量“税”。因此,如果税值以某种方式更新,那么尽管我们将相同的 productPrice 作为参数传递给函数,但我们将得到不同的输出。
但在这里我们需要做一个重要的说明:
注意:如果纯函数调用纯函数,这不是副作用,调用函数仍被视为纯函数。 (示例:在函数中使用 Math.max())
以下是函数不应该产生的一些副作用(但不限于),以便被视为纯函数-
- 发出 HTTP 请求
- 变异数据
- 打印到屏幕或控制台
- DOM 查询/操作
- 数学随机()
- 获取当前时间