<a href="#" id="jc">好的</a> <h3>我</h3> <ul> <li>0</li> <li>1</li> </ul> <script> var lis = document.getElementsByTagName("li"); for(var i = 0; i < lis.length; i++){ lis[i].onclick = function(event){ alert(event); alert(i);//为是什么 等于2啊?上面的i不是小于lis.length吗?? } } </script>
9 回答
已采纳
menghuanbaolei
TA贡献20条经验 获得超2个赞
很有意思的题目,因为点击的时候,里面的 i 会在 i ++ 一次,却不会改变外面的 i
图片上传不了,直接上代码吧,你可以测试看看
var lis = document.getElementsByTagName("li"); for(var i = 0; i < lis.length; i++){ console.log(i); // 一开始输出i var is = i; // 如果想里面的i,跟外面一样的话, 可以在这里赋值一下 lis[i].onclick = function(event){ console.log(i); // 当点击的时候输出i console.log(is) // 输出的 i 就是 1 了 } } // 测试循环的 // for(var j = 1; j <= 10; j++){ // console.log(j); // document.onclick = function () { // console.log(j); // } // }
guaguaerhao
TA贡献1条经验 获得超2个赞
哥们,我觉得是你想得太复杂了吧,i=0的时候,i<lis.length,那么i++第一遍。程序执行一遍了,i就变成了1
那么i=1的时候,i<lis.length还是成立的,那么程序自然就会在执行一遍,那么i自然就会在程序执行一遍之后,i++了。
而这时候的i已经不是刚刚的那个 i=1 的 i 了。而是 i=2 了。所以 i 就是 2呢!!!我就是这么理解的。你思考一下吧。
LiuYina
TA贡献10条经验 获得超1个赞
其中for循环的作用就是要绑定onclick事件,也就是说当你点击的时候for循环已经结束了,i当然是2(i=1运行完时,自加一后为2,不成立,便跳出循环)。
要换成索引值
alert(lis[i].index);
stone310
TA贡献361条经验 获得超191个赞
i=0的时候判断i<lis.length为true,然后i++,i=1;
i=1的时候判断i<lis.length为true,然后i++,i=2;
i=2的时候判断i<lis.length为false,
所以最后i为2
i放在事件内部是不会循环的,因为页面加载时for循环绑定了lis[i].onclick事件,而这时候页面加载好后i已经循环完毕,是个定值,就是lis.length,在这里即为2
添加回答
举报
0/150
提交
取消