sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)

这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣。正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用JavaScript的过程中也增加了不少对Java的理解。同时也感受到了用语言最基本的东西去实现一些常用组件也是一件什么快乐的事情。

今天的源代码学习中看到关于缓存的是实现的时候,有进一步加深了对JavaScript闭包的理解!大神John Resig真的很叼呀~~他家有时间一定要看看他的那本书《Secrets of the JavaScript Ninja》,不过这本书貌似没哟中文版~~~!!!

function map(length) {// 如果没有指定Map的长度,默认初始长度为16length = length || 16;var keys = new Array(length);function cache( key, value ) {// 在key后面加上" "字符串可以防止key的值和本地的一些属性值命名冲突// 采用表达式语句,确保语句能够正确执行return (cache[ key + " " ] = value);}// 返回cache函数,利用了JavaScript中强大的闭包功能return cache;
}

这里使用了JavaScript的闭包特性,模拟实现了Java中的Map结构。利用闭包这样就可以确保我们每次操作的都是同一个Array对象,而不是新开辟的Array对象。不过,有一点要注意:JavaScript的垃圾回收机制采用的是引用计数方案,在value的赋值上要注意别造成了循环引用。这样很容易就造成了内存泄露!!

sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)相关推荐

  1. Auto.js学习笔记4—按键模拟

    Keys 按键模拟部分提供了一些模拟物理按键的全局函数,包括Home.音量键.照相键等,有的函数依赖于无障碍服务,有的函数依赖于root权限 一般来说,以大写字母开头的函数都依赖于root权限,执行此 ...

  2. JS学习笔记(九)深拷贝浅拷贝【Array、Object为例】

    JS学习笔记(九) 本系列更多文章,可以查看专栏 JS学习笔记 文章目录 JS学习笔记(九) 一.赋值&复制 二.浅拷贝(shallow copy) 1. 什么是浅拷贝 2. 数组的浅拷贝 ( ...

  3. 千锋Node.js学习笔记

    千锋Node.js学习笔记 文章目录 千锋Node.js学习笔记 写在前面 1. 认识Node.js 2. NVM 3. NPM 4. NRM 5. NPX 6. 模块/包与CommonJS 7. 常 ...

  4. ArcGIS JS 学习笔记4 实现地图联动

    原文:ArcGIS JS 学习笔记4 实现地图联动 1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而 ...

  5. WebGL three.js学习笔记 6种类型的纹理介绍及应用

    WebGL three.js学习笔记 6种类型的纹理介绍及应用 本文所使用到的demo演示: 高光贴图Demo演示 反光效果Demo演示(因为是加载的模型,所以速度会慢) (一)普通纹理 计算机图形学 ...

  6. Vue.js学习笔记 2022 04 17

    Vue.js学习笔记 1 Vue.js基础 Vue.js介绍 vuejs 渐进式 JavaScript 框架 Vue.js 如何应用 1 在普通html项目中,引入VUE.JS Hb 的项目 生成的 ...

  7. js学习笔记2 -- js使用方法

    js学习笔记2 -- js使用方法 方法一,使用外部js文件(推荐使用) 方法二,写在script标签中 方法三,写到标签的onclick属性中 方法四,使用超链接 方法一,使用外部js文件(推荐使用 ...

  8. 遇见 vue.js --------阿文的vue.js学习笔记(8 —1)------- 列表渲染

    ** 新学习新征程,我们一起踏上学习 vue.js的新长征 遇见 vue.js --------阿文的vue.js学习笔记(1)-----初识vue.js 遇见 vue.js --------阿文的v ...

  9. javascript从入门到跑路-----小文的js学习笔记目录

    ** javascript从入门到跑路-----小文的js学习笔记(1)---------script.alert.document.write() 和 console.log 标签 javascri ...

最新文章

  1. 如何释放电脑被限制的20%网速?
  2. 走进移动web开发的四大框架
  3. 怎样为wordpress主题的文章列表添加无插件分页?
  4. Windows平台下Go语言的安装和环境变量设置
  5. a标签在ie6和ie7下面换行显示问题解析
  6. java jsessionid 会话,如何使用JSESSIONID手动加载Java会话?
  7. ajax是宏任务还是微任务,(滴滴面试)事件循环Event Loop及微任务和宏任务的执行过程详解...
  8. Solr进阶之Solr综合文本相似度的多因素权重排序实现
  9. poj 2492 并查集 A Bug's Life
  10. RedHat Linux 企业5 oracle 10g
  11. 麻雀虽小五脏俱全----ZC评价系统
  12. 呵护流量尖峰时刻,我们是互联网的“守夜人”
  13. oracle执行计划px,【Oracle】并行等待之PX Deq: Execution Msg
  14. POG个体成长模型:痛苦是成长的起点
  15. 计算机网络ping超时,ping请求超时怎么回事?ping请求超时的解决方法
  16. 八股文--->JAVA基础
  17. 美味连连-QQ游戏辅助-简单实用的QQ游戏美味连连辅助(非外挂)
  18. 201571030130/201571030124《小学四则运算练习软件需求说明》结对项目报告
  19. 一文快速了解MassGrid网络
  20. 单片机自定义延时函数Delay取值详解

热门文章

  1. 推荐8个优质生产力工具,让你效率升级!
  2. Teamviewer13版的安装及使用教程
  3. 【Visual Studio Code】中文乱码问题
  4. 浏览器标签页形式运行【js代码】,小书签
  5. SQL Server服务远程过程调用失败解决
  6. JSon解析之JSonKit
  7. 安利几个堪称黑科技的电脑软件
  8. 流媒体服务器FFMPEG转码流摄像头取流
  9. android制作3d打印机,基于Rayland主板的3D打印机指令控制Android(部分)实现
  10. 如何判断样本标注的靠谱程度?置信度学习(CL)简述