1

我正在阅读 Eloquent JavaScript 并开始学习函数式编程(第 6 章)。我对以下示例感到困惑:

show(Math.min.apply(null, [5, 6]));

function negate(func) {
  return function() {
    return !func.apply(null, arguments);
  };
}

*注意:show() 只是将输出打印到 Eloquent JavaScript 网站上的控制台。

我不明白 negate() 函数与 show() 中的代码有何关联。negate() 函数在哪里调用?我没有看到它在该示例中的任何地方使用过,还是我错了?

4

2 回答 2

4

给出的代码包含两个示例。每个函数都有一个apply方法。在第一个示例中,Math.min'apply方法用于使用Math.min参数 list进行调用[5,6]。第二个例子应该与前面的例子形成对比,前面的例子negate定义为

function negate(func) {
  return function(x) {
    return !func(x);
  };
}

在该示例中,negate(func)返回一个参数的新函数,该函数使用该单个参数调用func,否定结果并返回它。但是,如果func期望不止一个参数会发生什么?这就是本示例所涵盖的内容。

function negate(func) {
  return function() {
    return !func.apply(null, arguments);
  };
}

在此定义中,negate(func)返回一个具有任意数量参数的新函数,该func函数使用提供的参数列表调用,对结果取反,然后返回它。

于 2013-05-20T19:28:44.690 回答
1

这本书的那部分是解释一些函数需要多个参数,所以你必须调用func参数.apply()而不是 just func(x)

使用的第一个示例NaN,它接受一个参数。这就是为什么它可以使用:

return !func(x);

但是有些函数,比如Math.min,接受几个参数。从技术上讲,使用 时negate,您不知道将传递什么函数,以及将传递什么参数。因此,您不能硬编码x传递给func. 使用.apply(),您可以将原始参数 , 传递argumentsfunc调用。

参考:

于 2013-05-20T19:29:03.693 回答