谁能帮我看看这个函数阿,为什么返回的值那么的奇怪阿

wjaj1214 2012-05-28 05:45:09
function test(){

var result=new Array();

for(var i=0;i<10;i++){

result[i]=function(){

return i;
};
}
return result;
}


输出result输出的是10个"function(){
return i;
} "这样的字符串阿,而不是0到9阿,为什么阿,求解释
...全文
128 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjaj1214 2012-05-29
  • 打赏
  • 举报
回复
我开始理解function和闭包了,非常受用,谢谢各位
asuka986 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

JScript code
function test(){

var result=new Array();

for(var i=0;i<10;i++){
//以下为一个闭包
result[i]=function(){

return i;
};
……
[/Quote]

= =! 啊咧,看了下楼主的问题,却是没执行函数,我没仔细看得说

而楼主原先的写法,确实是没解决闭包问题,引用1楼或2楼两位的方法已可解决 = =
asuka986 2012-05-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

但是按照3楼的说法这个是一个闭包,应该返回的是10个10,但是我返回的是0-9啊,不知道是什么原因
[/Quote]
function test(){

var result=new Array();

for(var i=0;i<10;i++){
//以下为一个闭包
result[i]=function(){

return i;
};
}
return result;
}
var a = test();
for(var i = 0 ;i<a.length;i++){
alert(a[i]());
}


= = 楼主不妨运行一下试试,必然都是返回10
wjaj1214 2012-05-29
  • 打赏
  • 举报
回复
但是按照3楼的说法这个是一个闭包,应该返回的是10个10,但是我返回的是0-9啊,不知道是什么原因
wjaj1214 2012-05-29
  • 打赏
  • 举报
回复
我理解了,谢谢各位的帮忙,感激不尽
不耐烦 2012-05-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

JScript code
function test(){

var result=new Array();

for(var i=0;i<10;i++){
//以下为一个闭包
result[i]=function(){

return i;
};
}
return result;
}
……
[/Quote]
result[i]=function(){

return i;
};
这是他每次都给数组赋值一个函数所致
其实楼主就忘记了把赋值的这个函数执行而已 。。。
asuka986 2012-05-28
  • 打赏
  • 举报
回复
function test(){

var result=new Array();

for(var i=0;i<10;i++){
//以下为一个闭包
result[i]=function(){

return i;
};
}
return result;
}


这是由闭包引起的,楼主去理解一下闭包,每次为result[i]赋值的时候,实际上引用的都是同一个i,而这个i的值在循环结束时,其值为10,所以返回的result中,不管怎么执行,都是输出10
不耐烦 2012-05-28
  • 打赏
  • 举报
回复
function test() {
var result = new Array();
for (var i = 0; i < 10; i++) {
(function(i){
result[i] = i
})(i);

}
return result
}
test()
alert(test())
似梦飞花 2012-05-28
  • 打赏
  • 举报
回复
function test(){
var result=new Array();
for(var i=0;i<10;i++){
result[i]=function(){
return i;
}();
}
return result;
}
var a=test();
alert(a);
这样试试

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧