Javascript学习笔记:闭包题解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript学习笔记:闭包题解相关的知识,希望对你有一定的参考价值。

代码:

1 function assignHandler(){
2     var element=document.getElementById(‘someElementId‘);
3 
4     element.onclick=function(){
5         alert(element.id);
6     }
7 }

问题:请问以上代码是否存在内存泄漏?

正确答案:存在内存泄漏

解析:由于上段代码中存在闭包,闭包会保存包含该闭包的函数的作用域链,因此element对象会一直存在于内存中,不会被垃圾回收机制回收掉。那么怎么解决闭包内存泄漏的问题呢?闭包内尽量引用包含函数的值类型变量,不引用包含函数的引用类型变量,且必须在包含函数的最后将引用变量的值设置为null,断开变量名与对象之间的连接,这样对象便可正常回收,解决内存泄漏问题。代码如下:

 1 function assignHandler(){
 2     var element=document.getElementById(‘someElementId‘);
 3     var id=element.id;
 4 
 5     element.onclick=function(){
 6         alert(id);
 7     }
 8 
 9     element=null;
10 }

 

以上是关于Javascript学习笔记:闭包题解的主要内容,如果未能解决你的问题,请参考以下文章

javascript闭包学习笔记

笔记:学习Javascript闭包(Closure)

JavaScript学习笔记——闭包

javascript学习笔记——闭包

学习Javascript闭包(Closure)

JavaScript闭包学习笔记(ife2015spring)