javascript中缓存
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <!-- <script type="text/javascript">
// 需求:
// 要实现一个创建缓存的函数:createCache()
// 1 对缓存进行读取
// 2 对缓存进行添加
// 3 对缓存进行修改
// 4 缓存的数量要控制在某个范围之内
// 5 每调用一次创建缓存的函数,就会创建一个缓存出来
// 并且多个缓存之间相互不影响! // 配置属性或者配置文件
var cacheLength = 3; // 分析:
function createCache() {
var cache = {};
// 作用:用来记录存储到缓存中key的顺序
var keyArr = [];
// 作用:对缓存进行增删改查
return function(key, value) {
// 1 先处理参数的个数
// 如果是一个参数:表示读取
// 如果是两个参数:表示设置
// a. value === undefined
// b. arguments.length
if(value === undefined) {
return cache[key];
} // 以下代码来处理设置缓存
// 1 修改
// 2 添加
// cache[key] === undefined
// 如果判断为:true, 说明是 添加
// 否则,就是修改
if(cache[key] !== undefined) {
cache[key] = value;
} else {
// 以下代码来处理添加的逻辑
// 1 缓存的长度超过了限制
// 2 缓存的长度没有超过限制
// arr.length > 50
//
// 如果是先给数据中添加数据,判断的时候,就是:> 限制的数值
// 如果是先判断后添加的数据,判断的时候,就是:>= 限制的数值
keyArr.push(key);
if(keyArr.length > cacheLength) {
// 删除,问题:删除哪一条数据
// 删除的是:数组中最开始添加进来的数据
// 也就是:索引号为:0 的值
var deleteKey = keyArr.shift();
delete cache[deleteKey];
} // 不管删除还是不删除数据,都要往缓存中添加数据
cache[key] = value;
}
};
} // LVHA => LV hao
// :linked
// :visited
// :hover
// :active // 调用
var typeCache = createCache();
// 添加缓存:
typeCache("class", ".cls");
typeCache("id", "#dv");
typeCache("tag", "div, p");
typeCache("tag", "span");
typeCache(":even", "dddd"); // 读取:
console.log(typeCache("class")); // .cls
console.log(typeCache("id")); // #dv
console.log(typeCache("tag")); // span
console.log(typeCache(":even")); // span var strCache = createCache();
</script> --> <script type="text/javascript">
var cacheLength = 3;
// 优化代码
function createCache() {
// 作用:用来记录存储到缓存中key的顺序
var cache = {},
// 作用:对缓存进行增删改查
keyArr = []; return function(key, value) {
if(value === undefined) {
return cache[key];
} if(cache[key] === undefined) {
// push 方法的返回值:添加数据之后的长度
if(keyArr.push(key) > cacheLength) {
delete cache[ keyArr.shift() ];
}
}
cache[key] = value;
};
} // 调用
var typeCache = createCache();
// 添加缓存:
typeCache("class", ".cls");
typeCache("id", "#dv");
typeCache("tag", "div, p");
typeCache("tag", "span");
typeCache(":even", "dddd"); // 读取:
console.log(typeCache("class")); // undefined
console.log(typeCache("id")); // #dv
console.log(typeCache("tag")); // span
console.log(typeCache(":even")); // dddd </script>
</body>
</html>
javascript中缓存的更多相关文章
- Javascript中关于cookie的那些事儿
Javascript-cookie 什么是cookie? 指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).简单点来说就是:浏览器缓存. cookie由什 ...
- JavaScript中闭包之浅析解读
JavaScript中的闭包真心是一个老生常谈的问题了,最近面试也是一直问到,我自己的表述能力又不能完全支撑起来,真是抓狂.在回来的路上,我突然想到了一个很简单的事情,其实我们在做项目时候,其实就经常 ...
- 深入理解javascript中的动态集合——NodeList、HTMLCollection和NamedNodeMap
× 目录 [1]NodeList [2]HTMLCollection [3]NamedNodeMap[4]注意事项 前面的话 一说起动态集合,多数人可能都有所了解.但是,如果再深入些,有哪些动态集合, ...
- 【原】理解javascript中的闭包
闭包在javascript来说是比较重要的概念,平时工作中也是用的比较多的一项技术.下来对其进行一个小小的总结 什么是闭包? 官方说法: 闭包是指有权访问另一个函数作用域中的变量的函数.创建闭包的常见 ...
- JavaScript中的函数表达式
在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表 ...
- 浅谈JavaScript中的Ajax
引言 作为一名WEB开发者,我想Ajax技术是一定需要掌握的.你也许平时没有使用JavaScript真正的写过Ajax.但是你一定使用过JQuery里面的相关函数来进行异步调用.今天我们就来介绍下原生 ...
- Javascript中理解发布--订阅模式
Javascript中理解发布--订阅模式 阅读目录 发布订阅模式介绍 如何实现发布--订阅模式? 发布---订阅模式的代码封装 如何取消订阅事件? 全局--发布订阅对象代码封装 理解模块间通信 回到 ...
- JavaScript中知而不全的this (转)
原文引自:http://www.cnblogs.com/snandy/p/4773184.html 都说 JavaScript 是一种很灵活的语言,这其实也可以说它是一个混乱的语言.它把函数式编程和面 ...
- JavaScript 中 4 种常见的内存泄露陷阱
了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧 ...
随机推荐
- VS2012编译PCL1.70的过程
以防博主删除文档,重新copy一遍... 关于个人的几个注意事项: 对于boost,可以使用vc100的库,来编译VC110的代码: 对于确实的包含,一个一个添加,要耐心等待!!! 原文链接:http ...
- (转)RabbitMQ学习之spring整合发送异步消息(注解实现)
http://blog.csdn.net/zhu_tianwei/article/details/40919249 实现使用Exchange类型为DirectExchange. routingkey的 ...
- C# 解析 j s 三元运算符
private void button1_Click(object sender, EventArgs e) { //转换 string str1 = "表达式1?表达式2:表达式3&quo ...
- Java将数据以Excel文件形式导出后台代码实现
下面代码实现所需jar包: tomcat-embed-core-8.5.11.jar: commons-lang3-3.0.1.jar: commons-io-2.5.jar: poi-3.9.jar ...
- ES2015 模板字符串 ``
js中类似`${xx,yy}`的语句是什么意思? `string` 是模板字符串,ES2015新增的符号. var x = 'a', y = 'b'; var z = `${x,y}`; //'b' ...
- 【Git教程】Git教程之分支管理
在前一篇文章中,主要针对Git本地仓库和远程仓库的基本操作命令进行了简要介绍,本文主要集中介绍Git的另一个主要的特点:分支管理和多人协作. 什么是分支管理 当一个任务需要多人协作完成时,每个 ...
- awk一次性分别赋值多个value给多个变量,速度对比
方法 #方法1: echo "apple banana orange" | awk '{print $1,$2,$3}' | while read a b c do echo a= ...
- 【2018集训队互测】【XSY3372】取石子
题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...
- alsa-lib 交叉编译以及声卡驱动测试 (转)
l 下载alsa-utils, alsa-lib, 版本要一致 http://www.alsa-project.org/main/index.php/Download l 编译alsa-lib . ...
- RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第六篇【AppiumLibrary等待函数介绍】
http://blog.csdn.net/deadgrape/article/details/50622441 废话不多说,少年们请看下面. Wait Until Page Contains text ...