此函数如何修改另一个函数?(高阶函数)
How does this function modify the other? (Higher Order Functions)
这段代码在做什么?它是如何执行的?x等于什么?
另一种有用的高阶函数类型修改了给定的函数值:
function negate(func) {
return function(x) {
return !func(x);
};
}
var isNotNaN = negate(isNaN);
show(isNotNaN(NaN));
函数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等)都有大量的这样的实用程序函数。
附言我会更笼统地写它:
function negate(func) {
return function() {
return !func.apply(null, arguments);
};
}
这样,它可以与任意数量的参数的布尔值函数一起使用。
相关文章:
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- 多次调用另一个javascript函数中的javascript函数
- 使用JS函数来使用另一个函数的语法?node.js
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何从onclick函数设置全局变量并将其传递给另一个JS文件
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- 另一个Ajax函数触发的Ajax函数不起作用
- 如何从另一个处理程序内部取消JavaScript事件处理程序函数的执行
- 如何在不预定义的情况下将javascript函数传递到另一个函数中
- 从另一个函数获得$this值
- 如何记录调用另一个函数的函数的返回值
- 它在另一个函数中嵌套后不会输出文本
- 如何将自动完成的值传递到另一个函数中
- 将一个函数作为参数传递给javascript中的另一个函数
- 同一事物的两个函数,一个崩溃,另一个不崩溃,为什么
- 从另一个函数延迟解析的返回
- 多次调用promise函数,直到另一个promise函数满足条件