一个奇怪的问题,在线求解答

onepiece81 2008-07-07 10:20:52
小弟在做一个东西时,突然遇到这样一件事
代码大概意思如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>22</title>
</head>

<body>

<input type="button" id="b1" name="btn1" value="btn1" />
<input type="button" id="b2" name="btn1" value="btn2" />
<input type="button" id="b3" name="btn1" value="btn3" />
<script>
var tmp=document.getElementsByTagName("input");

for(var i=0; i < tmp.length; i ++){
tmp[i].onclick=function() {
window.alert(i);
}
}
</script>
</body>
</html>
原以为这样绑定事件点击3个不同的按钮会弹出012, 结果点击3个按钮都只弹出了3,orz。

但把代码换成如下
<script>
var tmp=document.getElementsByTagName("input");

for(var i=0; i < tmp.length; i ++){
test(tmp[i], i);
}

function test(obj, num) {
obj.onclick=function() {
window.alert(num);
}
}
</script>
又能正常弹出012
有点搞不懂了,按照正常想法来说,第一种写法固然省点代码,但结果却不对,而且居然弹出的是3,再次orz,第二种倒是正确,但代码给人的感觉好像多此一举,
求高人解答,为什么第一种写法会产生那样的结果。
...全文
70 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
onepiece81 2008-07-07
  • 打赏
  • 举报
回复
2F正解,无意当中创建的闭包,js真是深似水啊
onepiece81 2008-07-07
  • 打赏
  • 举报
回复
怎么没人解答??人工置顶。。。
qq100100759 2008-07-07
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>22 </title>
</head>

<body>

<input type="button" id="b1" name="btn1" value="btn1" />
<input type="button" id="b2" name="btn1" value="btn2" />
<input type="button" id="b3" name="btn1" value="btn3" />
<script>
var tmp=document.getElementsByTagName("input");
for(var i=0; i < tmp.length; i ++){
(function(e){
tmp[e].onclick=function() {
window.alert(e);
}
})(i);
}
</script>
</body>
</html>
----------------------------------------

闭包做怪而已

87,903

社区成员

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

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