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)
这样,它可以与任意数量的参数的布尔值函数一起使用.
归档时间: |
|
查看次数: |
71 次 |
最近记录: |