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 进行后续处理。代码运行完全正常,但返回的这个箭头函数让我感到困惑。如果需要更多数据,我可以更新问题。
称为高阶函数。
您可以毫无疑问地理解这意味着什么:
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()。
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |