闭包的理解
定义:有权访问另外一个函数作用域中的变量的函数。
创建闭包的方式:就是在函数内部创建另外一个函数。
实质:
内部函数的作用域包含了外部函数的作用域,作用域链本质上是一个指向变量对象的指针列表,它只是引用但不实际包含变量对象。
闭包的使用情况:
1.保护函数内的变量安全。外部函数的变量只能被闭包函数访问;(也就是读取函数内部的变量)
2.在内存中维持一个变量。该变量不会被垃圾回收机制回收。
闭包的副作用:
1.闭包与变量:闭包只能取得包含函数中任何变量的最后一个值。
解决闭包的方法:创建匿名函数,并立即执行该匿名函数,并把结果返回。例如:http://www.cnblogs.com/Darren_code/archive/2012/01/31/questions.html
http://www.qttc.net/201208154.html
for( var i=0; i<pAry.length; i++ ) {
pAry[i].onclick = function(num) {
return function(){ alert(i); } (i);
}
换种思路:由于在内层函数里只要出现循环变量的话 都是最终值,所以我们利用匿名函数激发出一个作用域,在进入内层循环之前,有另一变量获得该循环变量的值,这一思想是处理闭包问题的精髓。
for(var i=0;i<div.length;i++){
(function(){
var temp=i;
div[temp].onclick=function()
{
alert(temp);
}
})()
}
2.关于this对象的使用
3.内存泄露问题
4.闭包举例
function closure(){ var num = 0;
return function(){
return num++;
} }
var a = closure();
a() // 0
a() //1
参考资料:
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html
http://wlog.cn/javascript/javascript-closures.html