JavaScript - 高阶函数小练习
编辑
43
2024-12-29
代码展示
class Person {
constructor(name, age) {
this.name = name
this.age = age
}
}
const personArr = [
new Person("孙悟空", 18),
new Person("沙和尚", 38),
new Person("红孩儿", 8),
new Person("白骨精", 16),
]
function filter(arr, cb) {
const newArr = []
for (let i = 0; i < arr.length; i++) {
if (cb(arr[i])) {
newArr.push(arr[i])
}
}
return newArr
}
result = filter(personArr, a => a.name === "孙悟空")
result = filter(personArr, a => a.age >= 18)
const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(arr, a => a % 2 === 0)
console.log(result)
function someFn() {
return "hello"
}
function outer(cb){
return () => {
console.log("记录日志~~~~~")
const result = cb()
return result
}
}
let result = outer(someFn)
// console.log(result)
function test(){
console.log("test~~~~")
return "test"
}
let newTest = outer(test)
newTest()
第一个代码片段(filter
函数)
这个片段定义了一个 filter
函数,它接受一个数组和一个回调函数作为参数。
filter
函数遍历数组,对每个元素调用回调函数进行测试,然后返回一个新数组,其中包含所有通过测试的元素。这个功能类似于 JavaScript 内置的 Array.prototype.filter
方法。
function filter(arr, cb) {
const newArr = [];
for (let i = 0; i < arr.length; i++) {
if (cb(arr[i])) {
newArr.push(arr[i]);
}
}
return newArr;
}
第二个代码片段(outer
函数)
这个片段定义了一个 outer
函数,它接受一个回调函数 cb
作为参数,并返回一个新的函数。
这个新函数在执行时会先记录日志,然后调用 cb
并返回其结果。这个模式通常用于在函数执行前后添加额外的逻辑,例如日志记录、性能监控等。
function outer(cb) {
return () => {
console.log("记录日志~~~~~");
const result = cb();
return result;
};
}
不同点
用途不同:
filter
函数用于数组过滤,生成一个新数组。outer
函数用于在回调函数执行前后添加额外的逻辑。
参数和返回值:
filter
接受一个数组和一个回调函数作为参数,返回一个新数组。outer
接受一个回调函数作为参数,返回一个新的函数。
实现细节:
filter
内部使用for
循环遍历数组,并根据回调函数的返回值决定是否将元素添加到新数组中。outer
返回一个新的匿名函数,该函数在执行时会先记录日志,然后调用并返回回调函数的结果。
- 4
- 0
-
分享