javascript - 此过滤代码如何使用函数参数来填补给定计算中的空白?
问题描述
因此,我正在阅读这本名为“Eloquent JavaScript”的书,并且遇到了用于查找某些通过测试的元素的过滤器功能。代码如下:
filter(array, test) {
let passed = [];
for (let element of array) {
// What exactly is test(element) in the if statement below?
if (test(element)) {
passed.push(element);
}
}
return passed;
}
console.log(filter(SCRIPTS, script => script.living));
// → [{name: "Adlam", …}, …]
我的问题:声明范围内到底发生了if
什么?它在书中说test
填补了计算中的“空白”。我可以理解它被用作函数的返回值。但是,如果你的函数只返回,为什么你需要一个element
inside ?test
test
script.living
另外,如果答案是“因为您正在测试每个元素”,那么测试函数究竟是如何“检查”元素的?我希望我在问什么时说清楚了。感谢所有的帮助。
解决方案
在 if 语句的范围内到底发生了什么?
该test
函数通过element
as 参数执行。这个事实也与你的下一个问题有关
如果您的测试函数只返回 script.living,为什么还需要在 test 中添加一个元素?
script => script.living
script
只是参数的名称。此名称将替换为函数调用时收到的实际元素。因此,当if( test(element))
被执行时,script
被绑定到element
并且被执行的实际指令是element.living
.
因此,例如,假设电流element
为{name: "Adlam", living: true}
。在这种情况下,test
函数将返回true
,因为元素的living
属性设置为true
。另一方面,如果元素是{name: John, living: false}
,test
函数将返回false
,因为living
属性设置为false
。
走得更远一点
这里还发生了其他事情。Javascript具有所谓的Falsy
和Truthy
值:
- https://developer.mozilla.org/en-US/docs/Glossary/Falsy
- https://developer.mozilla.org/en-US/docs/Glossary/truthy
所以在上面的例子中,如果函数返回任何可能的值(, , , ...) ,if(test(element))
子句中的代码将不会被执行。示例:。相反,如果函数返回任何值,则子句内的代码将被执行。例子:test(element)
Falsy
false
0
null
undefined
{name: "Adlam", living: null}
if
test(element)
Truthy
{name: "Adlam", living: 1}
推荐阅读
- python - 为什么两台 Mac 电脑对 tkinter 事件的响应不同?
- xml - xml 到文件夹 vb.net
- angular - 关闭关闭时,有没有办法使 mat-dialog 的背景可点击?
- c# - Dapper、Postgres 和 camelcase
- javascript - 如何使用同一函数中的值创建表格并将值设置为表格单元格
- r - 调整 ggplot 图例和值
- java - 类的方法中类的引用
- javascript - “POST”请求是否返回 XML 数据?
- react-native - 在本地运行 expo-cli 命令(使用本地 expo-cli)
- c# - 我正在尝试在表的特定列上创建 SQL 缓存依赖关系,但是当表的任何列发生更改时,数据都存储在缓存中