利用闭包与高阶函数实现缓存函数的创建

news/2024/7/5 3:55:06

缓存函数是一种用于存储和重复利用计算结果的机制。其基本思想是,当一个函数被调用并计算出结果时,将该结果存储在某种数据结构中 (通常是一个缓存对象)以备将来使用。当相同的输入参数再次传递给函数时,不再执行实际的计算,而是直接返回之前缓存的结果,从而避免重复的耗时计算。
避免重复计算、提高性能、数据结构存储

缓存一般是以键值对的形势存储在数据的结构当中,其中的键是函数的输入参数,而值就是对应的输出结果

示例:以下当前函数调用了几次,就执行了几次,且传入的参数一样,那么输出的结果都是同一个结果。

function expensiveCalculation(input){
    console.log("执行昂贵计算...")
    return input * 2;
}
expensiveCalculation(10)
expensiveCalculation(10)
expensiveCalculation(10)
expensiveCalculation(10)
expensiveCalculation(10)

 

什么闭包:

允许函数保留其包含(封闭)范围中变量的访问权,即使在该范围外执行函数

什么高阶函数:

接受函数作为参数或将函数作为返回值输出的函数

那么根据闭包和高阶函数,我们可以使用以下代码去实现缓存函数

// 参数是一个函数,且函数将会返回一个闭包函数,且会保留originalFunction和cache两个内容变量的访问权
//originalFunction是一个原始的函数
function createCachedFunction(originalFunction){
     //定义一个对象进行缓存数据的存储
    const cache = {}
    return function(arg){
        //判断是否存在,存在则从缓存中获取
        if(cache[arg]){
            console.log(cache,arg)
            console.log('从缓存中取值',cache[arg])
            return cache[arg]
        }
        
        const result = originalFunction(arg)
        cache[arg] = result
        console.log("执行昂贵计算...",result)
        return result
    }
}

function expensiveCalculation(input){
    console.log("执行昂贵计算...")
    return input * 2;
}

const cachedExpensiveCalculation = 
    createCachedFunction(expensiveCalculation)


cachedExpensiveCalculation(10)
cachedExpensiveCalculation(10)
cachedExpensiveCalculation(10)
cachedExpensiveCalculation(10)
cachedExpensiveCalculation(10)

以下则是输出的结果:

 


http://lihuaxi.xjx100.cn/news/1892309.html

相关文章

微服务学习:Gateway服务网关

一,Gateway服务网关的作用: 路由请求:Gateway服务网关可以根据请求的URL或其他标识符将请求路由到特定的微服务。 负载均衡:Gateway服务网关可以通过负载均衡算法分配请求到多个实例中,从而平衡各个微服务的负载压力。…

利用Pytorch预训练模型进行图像分类

Use Pre-trained models for Image Classification. # This post is rectified on the base of https://learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/# And we have re-orginaized the code script.预训练模型(Pre-trained models)…

PHP的协程是什么?

PHP 的协程是一种轻量级的线程(或任务)实现,允许在一个进程中同时执行多个协程,但在任意时刻只有一个协程处于执行状态。协程可以看作是一种用户空间线程,由程序员显式地管理,而不是由操作系统内核进行调度…

KVO KVC

KVO & KVC KVC KVC(Key-value coding)键值编码,就是指iOS的开发中,可以允许开发者通过Key名直接访问对象的属性,或者给对象的属性赋值。而不需要调用明确的存取方法。这样就可以在运行时动态地访问和修改对象的属…

场景的组织及渲染(二)

3.11 分页细节层次节点 分页细节层次节点(osg::PagedLOD)继承自osg::LOD 节点,它也是一个细节层次节点,用于实现动态分页加载,根据视点来加载所需要的,分页细节层次节点中还可以包含LOD节点。它与osg::LOD节点的区别是…

如何在Ubuntu的Linux系统上搭建nacos集群

官方给出的集群部署架构图 集群部署说明 (nacos.io)3个或3个以上nacos节点才能构成集群当前示例中包含3个nacos节点,同时一个负载均衡器代理3个nacos,本示例中负载均衡器可使用的是nginx 准备并安装好正常运行的nginx,本示例略准备并安装好正…

【MySQL学习】概述

文章目录 1. mysql的启动和停止命令2. 客户端连接3. 数据模型 1. mysql的启动和停止命令 通过指令启动或停止,以管理员身份运行cmd,进入命令行执行如下指令: (1)启动myaql net start mysql(2)…

RAID(冗余独立磁盘阵列)介绍(一种用于存储数据的技术,通过将数据分布在多个硬盘驱动器上,以提高数据的可靠性和性能)

文章目录 RAID介绍什么是RAID?RAID的历史RAID的类型RAID 0RAID 1RAID 5RAID 6 RAID的选择和配置RAID在安装系统时的应用结论 RAID介绍 RAID(冗余独立磁盘阵列)是一种用于存储数据的技术,它通过将数据分布在多个硬盘驱动器上&…