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

onepiece81 onepiece81 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟在做一个东西时,突然遇到这样一件事
代码大概意思如下:
<!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个不同的按钮会弹出0,1,2, 结果点击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>
又能正常弹出0,1,2。
有点搞不懂了,按照正常想法来说,第一种写法固然省点代码,但结果却不对,而且居然弹出的是3,再次orz,第二种倒是正确,但代码给人的感觉好像多此一举,
求高人解答,为什么第一种写法会产生那样的结果。
...全文
评论 4
收藏 已收藏
分享
返回顶部
onepiece81
JavaScript 87,983 成员 224,681 内容