闭包(closure)是javascript语言的一个难点,对于初学者的我也算是花很多时间去理解,
以下是我的笔记,目前所理解的闭包如下,如有不对,望指正,再此感谢!
闭包有三特性:
1.函数嵌套函数。
2.函数内部可引用外部变量和参数。
3.参数和变量不会被垃圾回收机制所收回。
闭包的好处:
1、希望一个变量长期驻扎在内存中。
2.避免全局变量的污染。
3.私有成员的存在。
先说说js中的作用域
function f1(){ var n=999; function f2(){ alert(n); } return f2; } var result=f1(); result(); // 999
function closure(){ var oDiv = document.getElementById(‘oDiv‘);//oDiv用完之后一直驻留在内存中 oDiv.onclick = function () { alert(‘oDiv.innerHTML‘);//这里用oDiv导致内存泄露 }; } closure(); //最后应将oDiv解除引用来避免内存泄露 function closure(){ var oDiv = document.getElementById(‘oDiv‘); var test = oDiv.innerHTML; oDiv.onclick = function () { alert(test); }; oDiv = null; }
原文:http://www.cnblogs.com/tritri/p/5069257.html