我正在阅读Eloquent JavaScript,我得到了Functional programming (chapter 6)。我对以下示例感到困惑:
show(Math.min.apply(null, [5, 6]));
function negate(func) {
return function() {
return !func.apply(null, arguments);
};
}
*注意:show()只是将输出打印到Eloquent JavaScript网站上的控制台。
我不知道negate()函数如何与show()中的代码相关。调用negate()函数在哪里?我没有看到它在那个例子中的任何地方使用过,或者我错了吗?
答案 0 :(得分:4)
给出的代码包含两个示例。每个函数都有apply
方法。在第一个示例中,Math.min
的{{1}}方法用于使用参数列表apply
调用Math.min
。第二个示例应与前面的示例(其中[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)
,否定结果并返回
答案 1 :(得分:1)
本书的这一部分是为了解释某些函数采用多个参数,因此您必须使用func
而不仅仅.apply()
调用func(x)
参数。
第一个示例使用NaN
,它接受一个参数。这就是它使用的原因:
return !func(x);
但是某些函数(如Math.min
)接受了几个参数。从技术上讲,使用negate
时,您不知道将传递什么函数,以及将传递哪些参数。因此,您无法在传递给x
的{{1}}中进行硬编码。使用func
,您可以将原始参数.apply()
传递给arguments
来电。
参考: