一、闭包的定义
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;
}