接收一个函数作为参数的函数仍然可以被认为是纯函数吗?

  • 本文关键字:函数 认为是 参数 一个 javascript
  • 更新时间 :
  • 英文 :


addVat是一个纯函数吗?

function addVat(country, getVat, amount)
{
if(amount > 0) {
return amount + getVat(country)*amount
}

return amount
}

有一个函数作为参数- getVat -使addVat自动不纯?

根据getVat的实现,我们可以引入任何副作用…getVat可以返回一个随机值,使得addVat的结果不可预测。

const getVat = ()=> Math.random()
addVat('UK',getVat, 20)

产生外部副作用的案例…

const getVat = ()=> {
updateDbWithVatUsed(0.2)
return 0.2
}
addVat('UK',getVat, 20)

另一方面,单元测试是可行的,因为副作用或数据可变性在纯函数之外,我们可以存根,使测试完全可预测。

const getUKVat = ()=> 0.2
assert.equal(addVat('UK',getUkVat, 20), 24)

我的怀疑来自……是否将纯度定义为函数所做的事情,排除作为参数传递的外部调用所发生的任何事情?

否则,由于高阶函数是函数式编程的主题…如果不考虑调用因素,就不可能将函数单独分类为纯函数。

我认为这取决于getVat()。如果getVat()是纯的,addVat()也是纯的:)

Javascript语言不强制纯度,因此不可能保证调用作为参数传递的函数的纯度。这篇文章可能会有帮助。

相关内容

  • 没有找到相关文章

最新更新