大神们帮帮忙..为什么for循环函数跟for循环函数里面的内容结果会不一样

DavidWongSssss Student  2018-01-23 10:03:04
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script>
window.onload = function(){
var button = document.getElementById("bbb").getElementsByTagName("button");
// function cc(i){
// button[i].onmouseover = function(){
// button[i].style.background = "royalblue";
// }
// button[i].onmouseout = function(){
// button[i].style.background = "#FFC125";
// }
// }
for(var i = 0;i < button.length;i++){
// cc(i);
button[i].onmouseover = function(){
button[i].style.background = "royalblue";
}
button[i].onmouseout = function(){
button[i].style.background = "#FFC125";
}
}
}
</script>
<style type="text/css">
.aaa ul{
text-decoration: none;
}
.aaa ul li{
display: inline;
}
.aaa ul li button{
width: 100px;
height: 50px;
margin: 50px;
background-color: #FFC125;
}
</style>
</head>
<body>
<div class="aaa" id="bbb">
<ul>
<li><button></button></li>
<li><button></button></li>
<li><button></button></li>
</ul>
</div>
</body>
</html>

for循环函数的话可以鼠标移动过去就会变成蓝色,鼠标移走就会变回黄色
如果直接for循环函数里面的内容,鼠标移过去不会有任何变化...........
但是函数里面同样的内容,为什么我不for循环函数,就不行呢
求各位大神为我解答下
...全文
199 点赞 收藏 3
写回复
3 条回复
DavidWongSssss 2018年01月23日
引用 2 楼 jslang 的回复:
for循环中绑定事件,当事件真正的触发执行时,for循环早就结束了,这个时候循环变量i已经是循环最大值加1了。 而在函数内绑定事件会产生“闭包”,闭包会把每次循环i的值保存起来。 或者可以在事件函数内不使用循环变量i,而是用this获取触发事件的元素
谢谢你啊大神,被你一说就明白了,还特地去科普了一下this
回复 点赞
天际的海浪 2018年01月23日
for循环中绑定事件,当事件真正的触发执行时,for循环早就结束了,这个时候循环变量i已经是循环最大值加1了。 而在函数内绑定事件会产生“闭包”,闭包会把每次循环i的值保存起来。 或者可以在事件函数内不使用循环变量i,而是用this获取触发事件的元素
回复 点赞
天际的海浪 2018年01月23日
for循环中只是在绑定事件, 当事件真正的触发执行时,for循环早就结束了,这个时候循环变量i已经是循环最大值加1了。 而在函数内在绑定事件用产生“闭包”,闭包会把每次循环i的值保存起来。 或者可以在事件函数内不使用循环变量i,而是用this获取触发事件的元素
回复 点赞
发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告