MST

星途 面试题库

面试题:JavaScript函数式编程中的高阶函数应用场景及实现

请描述JavaScript高阶函数在事件处理、数组操作等常见应用场景中的作用。并实现一个高阶函数,它接受一个函数和一个数组作为参数,返回一个新数组,新数组中的元素是原数组元素经过传入函数处理后的结果,且要求使用闭包的概念优化代码性能。
27.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

JavaScript高阶函数在常见应用场景中的作用

  1. 事件处理:高阶函数可用于创建事件处理函数。例如,addEventListener 的第二个参数可以是通过高阶函数生成的函数。这样可以将特定逻辑封装在高阶函数内部,然后返回针对不同元素或场景定制的事件处理函数。比如可以创建一个高阶函数,它接受一个特定的操作逻辑,返回一个事件处理函数,当事件触发时执行该逻辑。这使得代码更具模块化和可维护性,不同元素的相似事件处理逻辑可以复用高阶函数生成的处理函数。
  2. 数组操作:JavaScript 提供了许多数组方法,如 mapfilterreduce 等,它们都是高阶函数。map 可以对数组中的每个元素应用一个函数,并返回一个新数组,新数组的元素是原数组元素经过函数处理后的结果,用于数组的转换;filter 用于根据传入的函数条件过滤数组元素,返回符合条件的元素组成的新数组;reduce 则可以对数组元素进行累加等操作,通过传入的函数将数组元素逐步处理为一个值。这些高阶函数大大简化了数组操作的代码,提高了代码的可读性和功能性。

实现高阶函数

function higherOrderFunction(func, arr) {
    return function() {
        let newArr = [];
        for (let i = 0; i < arr.length; i++) {
            newArr.push(func(arr[i]));
        }
        return newArr;
    };
}
// 使用示例
let arr = [1, 2, 3, 4];
let multiplyByTwo = function(num) {
    return num * 2;
};
let resultFunction = higherOrderFunction(multiplyByTwo, arr);
let result = resultFunction();
console.log(result); 

在上述代码中,higherOrderFunction 接受一个函数 func 和一个数组 arr 作为参数,返回一个内部函数。这个内部函数形成了闭包,因为它可以访问外部函数 higherOrderFunction 的变量 funcarr。当调用返回的函数时,会遍历数组 arr,将每个元素应用 func 函数,并返回处理后的新数组,这样可以在一定程度上优化性能,避免每次都重新传入函数和数组进行操作。