JS使用部分参数化函数

时间:2017-06-23 10:18:56

标签: javascript functional-programming

我是JS的新手,我尝试过以下代码:

function isBigEnough(element, index, array, threshold) {
  return (element >= threshold);
}
[1, 2, 3].every(isBigEnough(threshold=0)

我认为它不起作用,因为prototype(在Array.prototype.filter()中)不包含阈值,因此类型不匹配,但我们不能这样定义:     isBiggerThenZero = isBigEnough(threshold=0) 那么这个案例有很好的解决方法吗?

2 个答案:

答案 0 :(得分:4)

执行[1, 2, 3].every(isBigEnough(0))时。它:

  • 致电isBigEnough,返回false
  • 执行[1, 2, 3].every(false)false不是函数的地方。所以它会给你一个错误。

您可以使用将阈值绑定到返回函数的闭包:

function isBigEnough(threshold) {
  return function(element, index, array) {
     return (element >= threshold);
  }
}
[1, 2, 3].every(isBigEnough(0))

答案 1 :(得分:1)

默认参数必须在函数声明中,例如:

function isBigEnough(element, index, array, threshold=0) {
  return (element >= threshold);
}
[1, 2, 3].every(isBigEnough);

然而,现在很难通过门槛:

[1,2,3].every((...a)=>isBigEnough(...a,2));

所以你宁愿这样做:

function isBigEnough(threshold=0,element, index, array) {
 return (element >= threshold);
}
[1, 2, 3].every(isBigEnough.bind(null,5));//threshold=5