博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟Lodash实现自己的memoize记忆函数
阅读量:3916 次
发布时间:2019-05-23

本文共 1522 字,大约阅读时间需要 5 分钟。

分析:

1.这个函数接受一个处理函数作为参数;
2.这个函数返回一个匿名函数;
3.这个函数内部需要创建一个对象(cache)将传入的处理函数的执行结果缓存;
3.1用return出去的匿名函数的参数(arguments)作为这个对象(cache)的键,这个对象(cache)的值是传入的处理函数的执行结果。
3.2通过判断对象(cache)里是否已有return出去的匿名函数的参数(arguments)这个键来做是否要执行处理函数的依据。
3.3若对象(cache)已有return出去的匿名函数的参数(arguments)这个键的话就直接返回对应的缓存值;没有就执行处理函数,并将值做缓存。

// const _ = require("lodash");function getArea(r) {
console.log("半径", r); return Math.PI * r * r;}// Lodash里的记忆函数// const getMemoizeArea = _.memoize(getArea)// getMemoizeArea(2)// getMemoizeArea(2)// getMemoizeArea(2)// console.log(getMemoizeArea(null));// console.log(getMemoizeArea(null));// console.log(getMemoizeArea(null));// console.log(getMemoizeArea(undefined));// console.log(getMemoizeArea(undefined));// console.log(getMemoizeArea(undefined));// 记忆函数function memoize(fn) {
const cache = {
}; return function () {
const key = JSON.stringify(arguments); // cache[key] = cache[key] || fn.apply(null, arguments); // 存在缓存的值为0时,缓存失效 // cache[key] = cache[key] ?? fn.apply(null, arguments) // 空值合并运算符,在ES2020才新增的。也存在缓存结果为null或者undefined时,缓存失效问题。 if (!Object.keys(cache).includes(key)) {
// console.log('未缓存过') cache[key] = fn.apply(null, arguments); } return cache[key]; };}const myMemoize = memoize(getArea);console.log(myMemoize(0));console.log(myMemoize(0));console.log(myMemoize(0));console.log(myMemoize(null));console.log(myMemoize(null));console.log(myMemoize(null));console.log(myMemoize(undefined));console.log(myMemoize(undefined));console.log(myMemoize(undefined));

转载地址:http://qtvrn.baihongyu.com/

你可能感兴趣的文章
新鲜高频笔面试题分享,Redis、MongoDB、ElasticSearch...
查看>>
如何在 C# 中使用 const,readonly,static
查看>>
[Stardust]星尘分布式全链路监控
查看>>
.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号
查看>>
如何在 C# 中使用 Buffer
查看>>
大学班里80%都去培训班,为什么我没去
查看>>
Beetlex之websocket/tls服务压测工具
查看>>
Abp小试牛刀之 图片上传
查看>>
使用Select.HtmlToPdf 把html内容生成pdf文件
查看>>
叮咚!你有一份来自明源云的圣诞邀约
查看>>
如何在 ASP.NET Core 中使用 URL Rewriting 中间件
查看>>
怎样使用C# 获取WIFI的连接状态?
查看>>
生态和能力是国内自研操作系统发展的关键
查看>>
轻量级消息队列RedisQueue
查看>>
2020,你收获了什么?又失去了什么?
查看>>
龙芯.NET正式发布 稳步推进生态建设
查看>>
MiniProfiler,一个.NET简单但有效的微型分析器
查看>>
如何解决在ASP.NET Core中找不到图像时设置默认图像
查看>>
.NET Core AWS S3云存储
查看>>
代码质量在「内卷时代」的重要性
查看>>