解释"你可以拥有改变其他功能的功能"

时间:2015-07-25 03:26:40

标签: javascript higher-order-functions

当我在第5章遇到这个时,我正在阅读Eloquent JavaScript

  

你可以拥有创造新功能的功能。

function greaterThan(n) {
  return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
     

你可以拥有改变其他功能的功能。

function noisy(f) {
  return function(arg) {
    console.log("calling with", arg);
    var val = f(arg);
    console.log("called with", arg, "- got", val);
    return val;
  };
}
noisy(Boolean)(0);
//->calling with 0
//->called with 0 - got false

我的问题是:

  • 以上两个例子有何不同?
  • 嘈杂如何更改布尔

2 个答案:

答案 0 :(得分:4)

区别在于noisy的参数是另一个函数,而不是像数字那样的“普通”值。所以,是的,它创建了一个新的匿名函数,就像greaterThan一样,但它是修改其行为的现有函数的包装器。

在这种情况下,包装器只是在调用原始函数f之前和之后记录一些消息。但是你可以做其他事情,比如修改它的参数或它的返回值。例如,您可以实现partial function application,它允许您在程序中的某一点为函数调用提供一些参数,并在新函数中“记住”这些参数只是剩下的论点。

答案 1 :(得分:1)

  

以上两个例子有何不同?

greaterThan接受参数n,该参数是一个数字。

noisy接受一个参数f,该参数旨在成为一个可以在其中调用的函数。

greaterThan仅评估数字,noisy更灵活,因为它可以接受任何函数并执行它。

  

嘈杂如何改变布尔值?

noisy返回一个匿名函数,该函数在将结果存储在名为Boolean的变量的行中评估val

相关问题