javascript基础八(知识点类闭包)
来源:互联网 发布:淘宝太坑了女主角 编辑:程序博客网 时间:2024/06/12 00:11
/** * 一:什么是闭包 * 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();//2ddd();//3alert(a) //3function eee(){var a = 1;a ++;alert(a);}eee();//2eee();//2// 那么怎么可以做到,让a即是局部变量,又可以叠加:so:闭包function aaa(){var a = 1;return function bbb(){a++;alert(a);}}var b = aaa();b() //2b() //3alert(a)//报错// 例二end:// 例三startvar 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// 例四startfor(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
0 0
- javascript基础八(知识点类闭包)
- Javascript知识点总结(八)
- MySQL基础知识点八
- JavaScript基础(八) --- 正则
- JavaScript基础(八)- JavaScript 数据类型
- javascript(八)面向对象基础
- javascript基础之八(原型揭秘)
- JavaScript 入门基础 (八)
- Java基础------知识点整理(八)-----内部类
- JAVA基础知识点(八)--包、模版模式、object类
- JavaScript语言基础知识点图示(转)
- javascript基础知识点(with)2
- javascript基础知识点(arguments)3
- javascript面向对象编程(基础知识点)
- javascript基础知识点轨迹(二)
- Javascript基础知识点轨迹(三)
- Javascript基础知识点轨迹(四)
- JavaScript基础知识点归纳
- 请求返回JSON字符串时,IE出现下载对话框的解决方案
- 针对ListView 使用ListViewItem模板导致的ItemSource 变成对象 的原因
- 网络安全攻防学习资料推荐
- TOJ 4110 A+B
- XAML中特殊字符
- javascript基础八(知识点类闭包)
- VC++下使用ADO操作数据库的智能指针_ConnectionPtr、_RecordsetPtr、_CommandPtr的方法
- Spring bean数量统计
- 《程序员面试宝典》 —— 多态的作用
- nginx实现简单模块开发
- 如何在quartz的job中实现spring的依赖注入
- 51nod 1400 序列分解(DFS + 剪枝)
- PopupWindow响应返回键的问题
- java几个语法规则