javascript闭包与变量

来源:互联网 发布:linux特殊字符$? 编辑:程序博客网 时间:2024/06/14 16:11

一、闭包的定义

  1.闭包是指有权访问另一个函数作用域中的变量的函数。
  2.作用域链的配置机制引出了一个值得注意的副作用,即闭包只能取得包含函数中任何变量的最后一个值,因为闭包保存的是整个变量的对象,而不是某个特殊变量。

二、闭包的副作用

function countNumbers(){   var result = new Array();   for(var i=0;i<10;i++){      result[i] = function(){         return i;      };   }   return result;}

  1.表面上看,似乎每个函数都正确的返回了自己的索引值,即位置0的函数返回0,位置1的函数返回1。但实际上,每个函数都返回的是10,因为每个函数的作用于链中保存的都是countNumbers()函数的活动对象,所以它们是引用的同一个变量i。

三、改变闭包传值问题

  1.闭包只能访问变量的最后一个值的问题一直困扰着我们,我们可以通过创建匿名函数强制让闭包的行为符合预期结果,例:

function countNumbers(){   var result = new Array();   for(var i=0;i<10;i++){      result[i]=function(num){         return fucntion(){            return num;         }      }(i);   }   return result;}
0 0