闭包与变量
岛屿海丫 2017-11-28 09:47:56 function o(){
var result= new Array();
for(var i=0;i<10;i++){
result[i]=function(){
return i;
};
}
console.log(i); // 打印出i的值为10;
return result;
}
var a= new o();
alert(a);
for (var i=0; i < a.length; i++){
alert(a[i]());
}
在这个函数中看着返回的i应该为0,1,2,3,4等等,但实际上i返回10;
原因:闭包的存在
闭包只能取得函数中任何变量的最后一个值,在这个for循环中,取得的i的值为循环结束后的9++,即10;
result[i]=function(){
return i;
这段代码只是 函数o()的一个内部匿名函数,它仅仅在for循环内部声明他们,并没有执行 所以不会出现i的值分别打印出来为0,1,2,3,4,5,6,7,8,9;
alert(a); 返回的是function(){return i;}共10个。
原因:
alert(a); 相当于 alert( 0() ),即调用 0函数,返回的是 result,而result=function(){return i;} 所以会出现10个function(){return i;}
for (var i=0; i < a.length; i++){
alert(a[i]());
}
a[i]()意思为立即执行function(){return i;}上面说过 alert(a)返回的为function(){return i;} 共10个,先把再看立即执行它【“()”的作用】让i的值为10