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

kch*_*hak 8 javascript higher-order-functions

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

你可以拥有创建新功能的功能.

function greaterThan(n) {
  return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我的问题是:

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

Wyz*_*a-- 4

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

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