初学闭包,有下面的疑惑,希望得到高人的指点
第一种形式:
var result = new Array();
function createFunctions(){
for(var i=0;i<10;i++){
result[i] = function(){
return i;
};
}
return result;
}
createFunctions();
for(var i=0;i<result.length;i++){
alert(result[i]());
}//结果每个都是10.
改进后:
var result = new Array();
function createFunctions(){
for(var i=0;i<10;i++){
result[i] = function(){
return i;
}();
}
return result;
}
createFunctions();
for(var i=0;i<result.length;i++){
alert(result[i]);
}
//结果是0-9
那我的问题就是这个算是用闭包解决的吗?内部函数可以访问外部的变量。
再一次修改为:
var result = new Array();
function createFunction(){
for(var i=0;i<10;i++){
result[i] = function(num){
return function(){
return num;
};
}(i);
}
return result;
}
createFunction();
for(var i=0;i<result.length;i++){
alert(result[i]());
}
这个是书的用闭包解决最初的问题,我想第二个可以实现,为什么要这么复杂的写法呢?是不我理解的闭包还是有问题,还不知道闭包要是用在哪?
JS中变量只有函数作用域
JS中变量为词法作用域,也就是变量在声明的时候就确定其作用域
闭包其实是扩展了函数的作用域链,函数可以使用在其外层函数中声明的变量
你的2中写法实现的目的不同,导致实现的方式的差异
第1中方式:result中保存的是一个结果
第2中方式 result中保存的是一个函数对象,其具有再次执行的能力
看你想要的结果是什么,就用什么样的实现~~~