解释";您可以具有改变其他功能的功能"

Explain "you can have functions that change other functions"

本文关键字:功能 quot 改变 其他 解释      更新时间:2023-09-26

我正在阅读Eloquent JavaScript,在第5章中遇到了这个问题

您可以使用创建新函数的函数。

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

我的问题是:

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

区别在于noisy的参数是另一个函数,而不是像数字这样的"普通"值。因此,是的,它创建了一个新的匿名函数,就像greaterThan一样,但它是对现有函数的包装,可以修改其行为。

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

以上两个例子有何不同?

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

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

greaterThan只计算一个数字的情况下,noisy更灵活,因为它可以接受任何函数并执行它

噪声如何改变布尔值?

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