闭包的理解

定义:有权访问另外一个函数作用域中的变量的函数。

创建闭包的方式:就是在函数内部创建另外一个函数。

实质:

内部函数的作用域包含了外部函数的作用域,作用域链本质上是一个指向变量对象的指针列表,它只是引用但不实际包含变量对象。

闭包的使用情况:

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

posted @ 2012-12-04 13:59  沙漠孤鹰1140  阅读(200)  评论(0编辑  收藏  举报