sizzle.js学习笔记利用闭包模拟实现数据结构:字典(Map)
这几天学习和查看了jQuery和Property这两个很流行的前端库的御用选择器组件Sizzle.js的源代码,收获还是相对多的!之前一直做使用Java语言开发,其丰富的组件类库使得开发效率那叫一个快呀!突然转来做JavaScript一时间还有点儿不适应(快半年了),不过自从看见那么多漂亮的网站和对JavaScript接触的越来越多,也发现了其中的一些乐趣。正如自己一直坚信的那样,编程语言仅仅是工具,重要的是编程思想!使用JavaScript的过程中也增加了不少对Java的理解。同时也感受到了用语言最基本的东西去实现一些常用组件也是一件什么快乐的事情。
今天的源代码学习中看到关于缓存的是实现的时候,有进一步加深了对JavaScript闭包的理解!大神John Resig真的很叼呀~~他家有时间一定要看看他的那本书《Secrets of the JavaScript Ninja》,不过这本书貌似没哟中文版~~~!!!
function map(length) { // 如果没有指定Map的长度,默认初始长度为16 length = 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的赋值上要注意别造成了循环引用。这样很容易就造成了内存泄露!!
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-25 12:20:09