JS闭包小结
2016-02-28 15:14
681 查看
1 什么是闭包
简言之,闭包就是外部函数中包含另一个内部函数,这个内部函数就是一个闭包
2 闭包的优点、缺点
优点:
可以让一个变量常驻内存 (如果用的多了就成了缺点)
避免全局变量的污染
私有化变量
缺点
因为闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存
引起内存泄露
3 如何释放被闭包的变量内存
举个列子如下:
以上代码存在循环引用,会造成内存泄漏,解决方法如下:
那怎么释放的内存呢,简言之,就是在退出函数前将闭包引用的外部函数中的活动对象清除,或者说清除外部函数中与闭包有关的对象,比如上例中,el的引用次数是2,如果没有el=null这句,那么el对象将不会被清除。
简言之,闭包就是外部函数中包含另一个内部函数,这个内部函数就是一个闭包
2 闭包的优点、缺点
优点:
可以让一个变量常驻内存 (如果用的多了就成了缺点)
避免全局变量的污染
私有化变量
缺点
因为闭包会携带包含它的函数的作用域,因此会比其他函数占用更多的内存
引起内存泄露
3 如何释放被闭包的变量内存
举个列子如下:
window.onload = function(){ var el = document.getElementById("id"); el.onclick = function(){ alert(el.id); } }
以上代码存在循环引用,会造成内存泄漏,解决方法如下:
window.onload = function(){ var el = document.getElementById("id"); var id = el.id; //解除循环引用 el.onclick = function(){ alert(id); } el = null; // 将闭包引用的外部函数中活动对象清除 }
那怎么释放的内存呢,简言之,就是在退出函数前将闭包引用的外部函数中的活动对象清除,或者说清除外部函数中与闭包有关的对象,比如上例中,el的引用次数是2,如果没有el=null这句,那么el对象将不会被清除。
相关文章推荐
- Jsonp 复习笔记
- JavaScript--map、reduce、filter、sort
- js中的各种宽高
- 解析JSON数据的详细步骤以及偷懒技巧(使用第三方库GSON以及GsonFormat工具)
- netctoss01_项目概述及规范【Servlet+JSP版】
- html、css、js的命名规范
- js继承学习
- jsp内置对象*response
- jsp内置对象*session
- jsp内置对象*out
- jsp内置对象*page
- jsp内置对象*exception
- jsp内置对象*pageContext
- jsp内置对象*config
- JavaScript--Map和Set介绍
- 【前端】Sublime text3 插件HTML/CSS/JS prettify 格式化代码
- bzoj 1031: [JSOI2007]字符加密Cipher 后缀数组
- 1016: [JSOI2008]最小生成树计数
- JSP—九大隐式对象之pageContext
- 关于sort的使用