Javascript 这个高阶函数是如何工作的?

Javascript 这个高阶函数是如何工作的?,javascript,filter,ecmascript-6,functional-programming,Javascript,Filter,Ecmascript 6,Functional Programming,我正在阅读关于react的指南,其中一个示例让我有点困惑,下面是其中的一部分: import React,{Component}来自'React'; 函数doFilter(查询){ 返回函数(用户){ 返回查询===user.name; } } 类应用程序扩展组件{ ... render(){ 常量用户=[ {name:'Robin'}, {name:'Markus'}, ]; 返回( {用户 .filter(doFilter(this.state.query)) .map(user=>{u

我正在阅读关于react的指南,其中一个示例让我有点困惑,下面是其中的一部分:

import React,{Component}来自'React';
函数doFilter(查询){
返回函数(用户){
返回查询===user.name;
}
}
类应用程序扩展组件{
...
render(){
常量用户=[
{name:'Robin'},
{name:'Markus'},
];
返回(
    {用户 .filter(doFilter(this.state.query)) .map(user=>
  • {user.name}
,如下所示:

users.filter(doFilter(this.state.query))
…发生的第一件事是计算
this.state.query
,然后调用
doFilter
传递该值

这将返回一个如下所示的函数:

function (user) {
  return query === user.name;
}
query
的值绑定到传递给
doFilter
的值


然后,
users.filter
将以此函数作为参数调用。请注意,在此阶段,
doFilter
不再扮演任何角色。执行筛选的是匿名函数,为调用它的每个
user
返回一个布尔值。

filter不调用doFilter;doFilter将在调用该函数后被调用它返回的函数由筛选器调用。您可以将返回的函数提取到一个变量中,这可能会澄清流程。这就是高阶函数的含义,一个返回(和/或接受)函数的函数。@jornsharpe是正确的。就好像您有这两行一样。
const filterPredicate=doFilter(this.state.query);
users.filter(filterPredicate).map….
谢谢,所以doFilter之间有一个闭包,它将查询传递给它的返回函数?实际上变量
query
引用了传递给
doFilter
的参数,它为该变量提供闭包。