Mar*_*ant 2 javascript functional-programming
这段代码在做什么?它是如何执行的?什么是x等于?
另一种有用的高阶函数类型修改了它给出的函数值:
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
Run Code Online (Sandbox Code Playgroud)
该函数negate()返回一个Function对象,该对象在被调用时将传递return !func(x);任何参数x.这个Function对象被存储在变量isNotNaN与func结合于内置函数isNaN().在下一行中,isNotNaN使用参数NaN(JavaScript关键字)调用存储的函数对象.正是在这一点上x受到约束NaN.返回值传递给函数show()(此处未显示).
有关更多信息,请阅读JavaScript函数,并参考JavaScript的Function对象和function表达式的文档.
编辑:为什么这样?有时,使用一个反转给定布尔函数的函数是有用的.例如,假设您有一些复杂的谓词,并且您希望为谓词所在的所有元素过滤数组false.您可以使用negate()将谓词函数转换为一个函数,该函数计算true这些元素并仅用于Array.prototype.filter()完成工作.可以把它想象成一个实用函数,它可以节省你function(x) { return !predicate(x); }每次想要布尔值函数的逆时都要写很多东西.它有点琐碎,但是很多JS库(例如,underscore.js,jquery等)都有这样的实用功能.
PS我会更一般地写它:
function negate(func) {
return function() {
return !func.apply(null, arguments);
};
}
Run Code Online (Sandbox Code Playgroud)
这样,它可以与任意数量的参数的布尔值函数一起使用.