代码展示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 返回一个新的匿名函数,该函数在执行时会先记录日志,然后调用并返回回调函数的结果。