我不明白这个 javascript 返回语句。它使用这个箭头函数

leg*_*acy 3 javascript return-type ecmascript-6

谁能解释一下这个 javascript 语法。我不明白那个返回语句。“person”是函数的参数吗?如果“是”,它从哪里经过?此组件中没有 person 变量。至少该 return 语句的详细版本也会有所帮助。这样我才能理解

const filterBy = (term) => {
    const searchTermLower = term.toLowerCase()
    return (person) => Object.keys(person).some(prop => 
        person[prop].toLowerCase().indexOf(searchTermLower) !== -1
    )
}
const filterPerson = persons.filter(filterBy(searchTerm))
Run Code Online (Sandbox Code Playgroud)

这里 presons 是一个对象数组,搜索词是一个字符串。

const persons=[
{ name: 'abc', number: '123456' },
{ name: 'def', number: '44233' },
{ name: 'xyz', number: '345345' },
{ name: 'npe', number: '12312' }]
Run Code Online (Sandbox Code Playgroud)

后来我使用这个返回的 filterPerson 进行后续处理。代码运行完全正常,但返回的这个箭头函数让我感到困惑。如果需要更多数据,我可以更新问题。

gio*_*gim 6

称为高阶函数。

您可以毫无疑问地理解这意味着什么:

let increment = x => x+1;
Run Code Online (Sandbox Code Playgroud)

现在想象你有一个函数,它不是像上面那样返回递增的值而是返回另一个函数,你会怎么写?简单的:

let adder = x => y => y+x;
Run Code Online (Sandbox Code Playgroud)

用法:

let increment = x => x+1;
Run Code Online (Sandbox Code Playgroud)

这个例子也依赖于闭包的概念:x是一个闭包(注意当我调用add59 并返回 14时它是如何被记住的),这是一个不同的主题,但不应该阻止你理解高阶函数的含义。

“person”是函数的参数吗?如果“是”,它从哪里经过?

person的和y我的情况一样。那么什么时候y通过呢?答:当我调用 时add5,它的值为 9。


要准确参考您的示例,您想知道什么是person.

示例 1

这里:

[1,2,3].filter(person=>person)
Run Code Online (Sandbox Code Playgroud)

的价值是person什么?1,2,3 对吗?

现在person=>person用这个替换函数:

示例 2

let filterBy = ()=>person=>person; // Higher order function, just first function doesn't take a parameter
[1,2,3].filter(filterBy())
Run Code Online (Sandbox Code Playgroud)

示例1和示例2的区别在于示例1中我直接编写了函数,示例2中我通过调用生成了它filterBy()