alert(i);//为是什么 等于2啊?上面的i不是小于lis.length吗??

<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>  


慕前端8664132
浏览 2514回答 9
9回答

menghuanbaolei

很有意思的题目,因为点击的时候,里面的 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

哥们,我觉得是你想得太复杂了吧,i=0的时候,i<lis.length,那么i++第一遍。程序执行一遍了,i就变成了1那么i=1的时候,i<lis.length还是成立的,那么程序自然就会在执行一遍,那么i自然就会在程序执行一遍之后,i++了。而这时候的i已经不是刚刚的那个  i=1  的  i  了。而是 i=2 了。所以 i 就是 2呢!!!我就是这么理解的。你思考一下吧。

进击的小开

你没有点击时候,外面的循环是一直在运行的,

进击的小开

我觉得是函数的作用域与作用域链的问题,

qq_孤独患者忧于心_03873802

应该是执行次数吧

qq_奈奈奈_03699702

闭包。引用了全局变量对象

LiuYina

其中for循环的作用就是要绑定onclick事件,也就是说当你点击的时候for循环已经结束了,i当然是2(i=1运行完时,自加一后为2,不成立,便跳出循环)。要换成索引值alert(lis[i].index);

stone310

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为2i放在事件内部是不会循环的,因为页面加载时for循环绑定了lis[i].onclick事件,而这时候页面加载好后i已经循环完毕,是个定值,就是lis.length,在这里即为2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript