javascript基础八(知识点类闭包)
2015-07-08 14:17
471 查看
/** * 一:什么是闭包 * 1:函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制所收回 * 例一: * * 二:闭包有什么好处 * 1:希望变量长期驻扎在内存中 * 2:避免全局变量的污染 例二 * 3:私有成员的存在 * * 用法: * 1:代码模块化 例三 * 2:可以在循环中直接找到对应元素的索引(例四) * * 三:闭包需要注意的地方 * 在ie下会引发内存泄露 (关于内存泄露问题,文章底部) */ // 例一start: function aaa(a){ var b = 5; function bbb(){ alert(a); alert(b); } } aaa() //当函数执行后变量不会被垃圾回收机制所收回,因为在函数内部所调用 // js中的垃圾回收机制 function ccc(){ var a = 1; } ccc(); //当函数执行后变量就会被js中的垃圾回收机制所收回 // 例一end: // // 例二start: var a =1; function ddd(){ a ++; alert(a); } ddd(); //2 ddd(); //3 alert(a) //3 function eee(){ var a = 1; a ++; alert(a); } eee(); //2 eee(); //2 // 那么怎么可以做到,让a即是局部变量,又可以叠加:so:闭包 function aaa(){ var a = 1; return function bbb(){ a++; alert(a); } } var b = aaa(); b() //2 b() //3 alert(a)//报错 // 例二end: // 例三start var aaa = (function(){ var a = 1; function bbb(){ a ++; alert(a); } function ccc(){ a ++; alert(a); } return { b : bbb, c : ccc } })(); aaa.b(); aaa.c(); // 例三end // 例四start for(var i=0;i<oLi.length;i++){ (function(i){ oLi[i].onclick = function(){ alert(i); } })(i) } //或者 for(var i=0;i<oLi.length;i++){ oLi.onclick = (function(i){ return function(){ alert(i); } }(i)) } // 例四endIE中内存泄露的几种方式:
1、循环引用(Circular References) — IE浏览器的COM组件产生的对象实例和网页脚本引擎产生的对象实例相互引用,就会造成内存泄漏。这也是Web页面中我们遇到的最常见和主要的泄漏方式;
2、内部函数引用(Closures) — Closures可以看成是目前引起大量问题的循环应用的一种特殊形式。由于依赖指定的关键字和语法结构,Closures调用是比较容易被我们发现的;
3、页面交叉泄漏(Cross-Page Leaks) — 页面交叉泄漏其实是一种较小的泄漏,它通常在你浏览过程中,由于内部对象薄计引起。下面我们会讨论DOM插入顺序的问题,在那个示例中你会发现只需要改动少量的代码,我们就可以避免对象薄计对对象构建带来的影响;
4、貌似泄漏(Pseudo-Leaks) — 这个不是真正的意义上的泄漏,不过如果你不了解它,你可能会在你的可用内存资源变得越来越少的时候极度郁闷。为了演示这个问题,我们将通过重写Script元素中的内容来引发大量内存的"泄漏"。
参考:http://www.cnblogs.com/meteoric_cry/archive/2010/09/14/1825951.html
相关文章推荐
- js实现图片滚轮放大缩小以及鼠标拖动
- Javascript 正则表达式_3
- seaJS教程指南
- C#.NET WebApi返回各种类型(图片/json数据/字符串),.net图片转二进制流或byte
- JS通过Url传递中文参数,c#获取参数
- Chrome开发者工具
- JavaScript权威指南_127_第15章_脚本化文档_15.5-元素的内容-Text节点
- JavaScript JS中定义对象的几种方式
- jsp调用控件
- Ext3 PagingToolbar.js修改
- JS类型检测
- 通过JSTL+EL实现循环迭代
- 精通JavaScript开发课时11(DOM基础)笔记
- javascript笔记04:let语句 和 yield语句 和 with语句
- js中如何实现数字相加
- json-lib 之jsonConfig详细使用
- js 页面智能判断浏览器版本
- 详细分析JavaScript变量类型
- 【探秘ES6】系列专栏
- js实现图片点击左右轮播