代码展示 {#%E4%BB%A3%E7%A0%81%E5%B1%95%E7%A4%BA}
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
函数) {#%E7%AC%AC%E4%B8%80%E4%B8%AA%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5%EF%BC%88filter-%E5%87%BD%E6%95%B0%EF%BC%89}
这个片段定义了一个 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
函数) {#%E7%AC%AC%E4%BA%8C%E4%B8%AA%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5%EF%BC%88outer-%E5%87%BD%E6%95%B0%EF%BC%89}
这个片段定义了一个 outer
函数,它接受一个回调函数 cb
作为参数,并返回一个新的函数。
这个新函数在执行时会先记录日志,然后调用 cb
并返回其结果。这个模式通常用于在函数执行前后添加额外的逻辑,例如日志记录、性能监控等。
function outer(cb) {
return () => {
console.log("记录日志~~~~~");
const result = cb();
return result;
};
}
不同点 {#%E4%B8%8D%E5%90%8C%E7%82%B9}
-
用途不同:
-
filter
函数用于数组过滤,生成一个新数组。 -
outer
函数用于在回调函数执行前后添加额外的逻辑。
-
-
参数和返回值:
-
filter
接受一个数组和一个回调函数作为参数,返回一个新数组。 -
outer
接受一个回调函数作为参数,返回一个新的函数。
-
-
实现细节:
-
filter
内部使用for
循环遍历数组,并根据回调函数的返回值决定是否将元素添加到新数组中。 -
outer
返回一个新的匿名函数,该函数在执行时会先记录日志,然后调用并返回回调函数的结果。
-