VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > JavaScript教程 >
  • 利用闭包实现点击每个li输出对应的索引

复制代码
<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <ul class="nav">
        <li>榴莲</li>
        <li>臭豆腐</li>
        <li>鲱鱼罐头</li>
        <li>大猪蹄子</li>
    </ul>
    <script>
        // 闭包应用-点击li输出当前li的索引号
        // 1. 我们可以利用动态添加属性的方式
        var lis = document.querySelector('.nav').querySelectorAll('li');
        // for (var i = 0; i < lis.length; i++) {
        //     lis[i].index = i;
        //     lis[i].onclick = function() {
        //         // console.log(i);
        //         console.log(this.index);

        //     }
        // }
        // 2. 利用闭包的方式得到当前小li 的索引号
        for (var i = 0; i < lis.length; i++) {
            // 利用for循环创建了4个立即执行函数
            // 立即执行函数也称为小闭包因为立即执行函数里面的任何一个函数都可以使用它的i这变量
            // 其实我理解:这里就是想利用闭包的特性(因为函数内部还有一个函数调用了他的变量,所以他的变量不会被释放,一直的被保持的特性),外面那一层立即执行函数是故意加上去的,就是为了造闭包,不然你怎么实现外面的那层函数,用立即执行函数最好,不需要调用就可以自动执行
            (function(i) {
                // console.log(i);
                lis[i].onclick = function() {
                    console.log(i);

                }
            })(i);

            // 事件后面不能直接用立即执行函数,因为立即执行函数根本不需要触发就会立即执行,事件对他没有效果
            // lis[i].onclick = (function() {
            //     console.log(i);
            // })(i);

            // (function() { //这个和上面那个有事件的效果一样,一刷新就打印出0,1,2,3
            //     console.log(i);
            // })(i);
        }
    </script>
</body>

</html>
复制代码

本文链接:https://www.cnblogs.com/xiongbafengyun/p/14664325.html


相关教程