[BlueDestiny] 出道javascript的题。

BlueDestiny 2006-09-19 12:49:09
<script type="text/javascript">
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
var item = 'item' + list[i];
result.push( function() {alert(item + ' ' + list[i])} );
}
return result;
}

function testList() {
var fnlist = buildList([1,2,3]);
for (var j = 0; j < fnlist.length; j++) {
fnlist[j]();
}
}

testList();
</script>

运行,并解释输出结果。
...全文
879 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
scow 2006-09-26
  • 打赏
  • 举报
回复
谢谢
BlueDestiny 2006-09-26
  • 打赏
  • 举报
回复
能够上csdn认识你们这些朋友,我也很高兴。。。:D
BlueDestiny 2006-09-26
  • 打赏
  • 举报
回复
to:brothercat(水星上疯狂上网的猫 ^_^)
是啊,想当初,我还是刚学js,时间过得真的快。。。:D

to:hb
是呀,呵呵,在学校的时光是最好的。不过也难得可以找到一起可以研究程序和一些底层的朋友呀:D
hbhbhbhbhb1021 2006-09-26
  • 打赏
  • 举报
回复
http://www.never-online.net/blog/article.asp?id=106
你的blog吧?看到closure想起很多学校时候的事,怀念!
大猫钓鱼 2006-09-26
  • 打赏
  • 举报
回复
结完帖去我这看看:
http://community.csdn.net/Expert/topic/5048/5048563.xml

看有没有怀念些什么^_^
BlueDestiny 2006-09-26
  • 打赏
  • 举报
回复
今晚准备结贴。:D
BlueDestiny 2006-09-25
  • 打赏
  • 举报
回复
相当于指针指向一个变量。
BlueDestiny 2006-09-25
  • 打赏
  • 举报
回复
to: scow(怡红快绿)

闭包里用的是引用变量(这里并非指的是像arr这样的“引用型变量”,而是将一个变量的引用存入,也就是非拷贝值,而是引用值)
scow 2006-09-25
  • 打赏
  • 举报
回复
受教了,请问一下楼主,那么闭包存的只能是值变量,不是引用变量了,即可以保存i,不能保存list[i]吗.不然怎么解释越界
var item = 'item' + list[i];
result.push( function() {alert(item + ' ' + list[i])} );
这里item不越界,list[i]却越界呢?
Apq001 2006-09-25
  • 打赏
  • 举报
回复
看了该贴也让我打消了对那个地方的顾虑,现在终于对那块放心了。
感觉好爽。
Apq001 2006-09-25
  • 打赏
  • 举报
回复
请容我佩服自己下,嘻嘻~~~!!
Apq001 2006-09-25
  • 打赏
  • 举报
回复
楼主厉害,闭包我一直没有准确理解到,直到现在,我仍有点晕。
但是有件事,我自己都没有想到,就是曾经遇到这个问题,我摸索出来的解决方法正是楼主指出的“稻草人”的“应用到最外层,通常应用此种方法来解决闭包的问题较好”的这种方法,看来我这是自学成才啊,哈哈~~~~
possible_Y 2006-09-25
  • 打赏
  • 举报
回复
一个内部的函数总是可以访问这个函数外部的变量和参数,甚至在外部的函数返回之后,这是Javascript语言的一个极其强大的特性。Javascript的面向对象功能模型都是依赖了Closure的语言特性来实现的

http://www.jibbering.com/faq/faq_notes/closures.html
http://blog.morrisjohns.com/javascript_closures_for_dummies

关于Closure和memory leaks:

http://laurens.vd.oever.nl/weblog/items2005/closures/
http://siteexperts.spaces.live.com/Blog/cns!1pNcL8JwTfkkjv4gg6LkVCpw!338.entry
ice_berg16 2006-09-24
  • 打赏
  • 举报
回复
不好意思,我记错了。文章我已经找不到了。当时也是不小心看到的。
福贵 2006-09-22
  • 打赏
  • 举报
回复
喜欢这种学习氛围
ice_berg16 2006-09-22
  • 打赏
  • 举报
回复
闭包不知道是谁翻译的,英文叫scope chain
国外的文章有所介绍,中文的比较少,这也是JS的一个特性,
在函数内部创建的function不会在函数结束时失效。
hbhbhbhbhb1021 2006-09-22
  • 打赏
  • 举报
回复
离散数学和数据结构中有提到,感觉特抽象,大体意思明白,讲就特费劲了:)
BlueDestiny 2006-09-22
  • 打赏
  • 举报
回复
to:ice_berg16(寻梦的稻草人)

是叫scope chain吗?呵呵,是closure吧?

scope chain是作用域链吧。closure在数学上也有解释的。

你的文章在哪里看到的,我也去看一下,麻烦给个地址过来。谢谢了
BlueDestiny 2006-09-21
  • 打赏
  • 举报
回复
to: eglic(圪圪)

上面已经说了用Function是解决方法之一了...
是是非非 2006-09-21
  • 打赏
  • 举报
回复
<script type="text/javascript">
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
var item = 'item' + list[i];
result.push( new Function('alert(\''+item + ' ' + list[i]+'\');'));
}
return result;
}

function testList() {
var fnlist = buildList([1,2,3]);
for (var j = 0; j < fnlist.length; j++) {
fnlist[j]();
}
}

testList();
</script>
加载更多回复(23)

87,907

社区成员

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

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