博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用闭包的举例
阅读量:7032 次
发布时间:2019-06-28

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

 
使用闭包的举例
-> 缓存
闭包允许函数带有一个缓存结构, 也就是说只有该函数可以使用的一个私有的独立的内存空间
用法
var func = (function () {
// 内存私有
 
return function () {
// 函数体
};
})();
 
 
例如, 在实际开发中会有频繁的获取元素的行为. 获取元素最简单的处理形式就是使用选择器.
在 h5 中, 引入了 一个新的 方法 document.querySelectorAll
 
var $ = function ( selector ) {
return document.querySelectorAll( selector );
};
 
在完成一个页面应用的时候, 一般会频繁的对元素进行获取操作. 为了提高效率我们可以将元素缓存.
 
$( ... ).事件(function () {
$( this )
$( ... )
})
 
缓存代码
var $ = (function () {
 
var cache = {};
 
return function ( selector ) {
// 首先判断缓存中有没有, 有的就直接使用缓存中的, 如果没有就再来获取
var nodeList;
if ( cache[ selector ] ) {
// 有
nodeList = cache[ selector ];
} else {
// 没有
nodeList = document.querySelectorAll( selector );
cache[ selector ] = nodeList; // 在 缓存中存起来
}
return nodeList;
};
})();
 
 
为了更高效的时候, 缓存需要一个容量. 所以给定一个 length 属性, 缓存中存储数据如果超过了
这个 length 那么就将最早加入的数据删除.
 
在私有空间中引入一个数组, 用于存储 键,
1> 保存顺序
2> 可以获得长度
 
 
var length = 3;
var $ = (function () {
 
var cacheKeys = [];
var cache = {};
 
return function ( selector ) {
// 首先判断缓存中有没有, 有的就直接使用缓存中的, 如果没有就再来获取
var nodeList;
if ( cache[ selector ] ) {
// 有
nodeList = cache[ selector ];
} else {
// 没有
nodeList = document.querySelectorAll( selector );
 
// 存储之前需要判断长度
if ( cacheKeys.length >= length ) {
// 需要删除
var key = cacheKeys.shift();
delete cache[ key ];
}
 
cacheKeys.push( selector );
cache[ selector ] = nodeList; // 在 缓存中存起来
}
return nodeList;
};
})();
    
Document
div

p

span b
div

p

span b
div

p

span b

 

转载于:https://www.cnblogs.com/joyce123/p/7266928.html

你可能感兴趣的文章
PagerTabStrip简单使用方式2
查看>>
SHELL脚本基础讲解
查看>>
PHP 数据库命令行的使用
查看>>
有赞公告设置
查看>>
win7系统开机遇到reboot and select proper boot device错误解决方法
查看>>
我的收藏
查看>>
pycharm 调试
查看>>
JAVA项目-日志服务配置
查看>>
检测来电
查看>>
交换机的基本原理与配置
查看>>
在Linux上创建磁盘阵列———RAID-5
查看>>
配置静态路由实现两个公司网路互联
查看>>
ShiroFilterFactoryBean源码及拦截原理深入分析
查看>>
boost mutex以及scoped_lock应用
查看>>
小鸡吃米
查看>>
FFmpeg AVFMT_NOFILE宏定义剖析
查看>>
Windows Server 2008 R2活动目录回收站
查看>>
能吃遍全世界的方便面,你也是人生赢家
查看>>
为什么使用LR11录制完,发现脚本每个页面都被录制了两遍?
查看>>
Fedora 删除旧内核
查看>>