MST

星途 面试题库

面试题:JavaScript 函数作为值在复杂场景下的优化

假设有一个频繁调用的JavaScript函数 `expensiveCalculation`,它接受一些参数并进行复杂的计算。为了优化性能,你需要实现一个函数 `memoize`,它接受 `expensiveCalculation` 作为参数,并返回一个新的函数。新函数在第一次调用时,会执行 `expensiveCalculation` 并缓存结果,后续调用如果参数相同,直接返回缓存的结果,而不再执行 `expensiveCalculation`。请使用函数作为值的特性实现此功能,并考虑如何处理参数为对象等复杂数据类型的情况。
34.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function memoize(func) {
    const cache = new Map();
    return function(...args) {
        // 处理复杂数据类型参数,使用JSON.stringify转为字符串作为缓存的键
        const key = args.map(arg => JSON.stringify(arg)).join('-');
        if (cache.has(key)) {
            return cache.get(key);
        }
        const result = func.apply(this, args);
        cache.set(key, result);
        return result;
    };
}

function expensiveCalculation(a, b) {
    // 这里模拟复杂计算
    return a + b;
}

const memoizedCalculation = memoize(expensiveCalculation);