这段代码在做什么?它是如何执行的?什么是x等于?
另一种有用的高阶函数类型修改了它给出的函数值:
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
答案 0 :(得分:6)
函数negate()
返回一个Function
对象,当被调用时,return !func(x);
将传递任何参数x
。此Function
对象存储在变量isNotNaN
中,func
绑定到内置函数isNaN()
。在下一行中,使用参数isNotNaN
(JavaScript关键字)调用NaN
中存储的函数对象。此时x
已绑定到NaN
。返回值传递给函数show()
(此处未显示)。
有关详细信息,请阅读JavaScript函数here,并参阅JavaScript Function
object和function
expression的文档。
false
的所有元素筛选数组。您可以使用negate()
将谓词函数转换为对这些元素求值为true
的函数,并使用Array.prototype.filter()
来完成工作。可以把它想象成一个实用函数,每次你想要一个布尔值函数的逆时,你就不必编写很多function(x) { return !predicate(x); }
。这有点琐碎,但是很多JS库(例如,underscore.js,jquery等)都有大量的实用功能。
P.S。我会更一般地写它:
function negate(func) {
return function() {
return !func.apply(null, arguments);
};
}
这样,它可以与任意数量的参数的布尔值函数一起使用。