• 使用let实现循环小例子


    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
        </head>
        <body>
            <ul>
                <li>HTML</li>
                <li>CSS</li>
                <li>JS</li>
                <li>JQ</li>
                <li>HTML5</li>
                <li>CSS3</li>
                <li>ES6</li>
            </ul>
        </body>
        <script>
            //使用let声明变量i,i就只在本轮循环中有效;如果使用var进行变量声明的话,就是全局变量,最后输出的就都是第8个
            var list = document.getElementsByTagName('li');
            for(let i = 0; i < list.length; i++){
                list[i].onmouseover = function(){
                    str = list[i].innerText;
                    this.innerText += '我是第' + (i+1) + ''
                    this.style.fontSize = '22px'
                    this.style.color = '#f00'
                }
                list[i].onmouseout = function(){
                    this.style.color = 'black'
                    this.style.fontSize = '16px'
                    this.innerText = str;
                }
            }
            
        </script>
    </html>

    用 let 声明的变量只在当前作用域中起作用,循环一次{}中就会有一个 i 值,当点击元素之后,就会获取到当前环境中的 i 值,从而结果是对应的。

    如果用 var 声明且不添加自执行的匿名函数的话,for循环会先执行完毕,当点击元素的时候才会执行绑定的点击事件,点击事件环境中没有 i 值,就会沿着作用域向上找,找到的就是for循环中的 i 值。这个时候for循环已经执行完毕了,i值为7,所以无论划过哪一个按钮,弹出结果都是11

  • 相关阅读:
    数据结构-堆(优先队列)习题
    数据结构-二叉搜索树习题
    数据结构-树习题
    数据结构-队列习题
    数据结构-堆栈习题
    数据结构-链表习题
    数据结构-顺序表习题
    数据结构-概论习题
    C语言中的stdin,stdout,stderr[转]
    SQL Server 查询数据库表结构
  • 原文地址:https://www.cnblogs.com/rickdiculous/p/12242725.html
Copyright © 2020-2023  润新知