js闭包问题

在看js闭包这一块儿,有一个地方难以理解。代码如下。为什么打印出来的始终是6呢

<script>
    window.onload = function(){        var ul =document.getElementsByTagName('ul')[0];        
    var li = ul.getElementsByTagName('li');        for(var i=0;i<li.length;i++){
                li[i].onclick = function(){                console.log(i);
            }
        }
    }</script><body><ul>
    <li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li></ul></body>


有只小跳蛙
浏览 519回答 1
1回答

撒科打诨

老有人问这种文问题,当然我刚学的时候,也来社区问过这个问题。简单说下,你那个绑定的点击事件函数,是当你点击了之后才会出触发,进入那个函数执行相应的代码的,所以一开始那个 i=1,2,3... 根本就没到那个函数里面去,你只是每次都给li 绑定了个 function(){console.log(i)};这个i并没有值。然后等你 去点击触发,这个时候i已经循环了一遍了,最后i就变成了 6,最后 进去执行那个函数 的时候 打印的那个i 当然就是 6咯。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript