zoukankan      html  css  js  c++  java
  • JS高级——闭包练习

    从上篇文章我们知道与浏览器的交互操作如鼠标点击,都会被放入任务队列中,而放入到任务队列中是必须等到主线程的任务都执行完之后才能执行,故而我们有时利用for循环给dom注册事件时候,难以获取for循环中对应的i值,可是我们可以利用闭包啊

    方法1:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div{
                height: 30px;
                border: 1px solid #000;
                margin: 5px;
            }
        </style>
    </head>
    <body>
    <div>我是第1个div</div>
    <div>我是第2个div</div>
    <div>我是第3个div</div>
    <div>我是第4个div</div>
    <div>我是第5个div</div>
    <div>我是第6个div</div>
    <div>我是第7个div</div>
    <div>我是第8个div</div>
    <div>我是第9个div</div>
    <div>我是第10个div</div>
    <script>
    var divs=document.getElementsByTagName('div');
    for (var i = 0; i < divs.length; i++) {
        function foo(j) {
            return function () {
                console.log('这是第'+(j+1)+'个div');
            }
        }
        var f=foo(i);
        divs[i].onclick=f;
    }
    </script>
    </body>
    </html>

    方法2:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            div{
                height: 30px;
                border: 1px solid #000;
                margin: 5px;
            }
        </style>
    </head>
    <body>
    <div>我是第1个div</div>
    <div>我是第2个div</div>
    <div>我是第3个div</div>
    <div>我是第4个div</div>
    <div>我是第5个div</div>
    <div>我是第6个div</div>
    <div>我是第7个div</div>
    <div>我是第8个div</div>
    <div>我是第9个div</div>
    <div>我是第10个div</div>
    <script>
        var divs=document.getElementsByTagName('div');
        for (var i = 0; i < divs.length; i++) {
            divs[i].onclick=function (j) {
                return function () {
                    console.log('这是第'+(j+1)+'个div');
                }
            }(i);
        }
    </script>
    </body>
    </html>

    在方法2中我们运用了立即执行函数表达式(函数自调用)方法,函数自调用的形式还有如下方法:

    <script>
        (function () {
            console.log(0);
        })();
        +function () {
            console.log(1);
        }();
        -function () {
            console.log();
        }();
    </script>
  • 相关阅读:
    使用Python画ROC曲线以及AUC值
    Machine Learning : Pre-processing features
    资源 | 数十种TensorFlow实现案例汇集:代码+笔记
    在 Mac OS X 终端里使用 Solarized 配色方案
    编译安装GCC 4.7.2
    Office -Word 公式插件Aurora的使用 ——在 Word 中插入 LaTex 公式
    LaTeX 写中文论文而中文显示不出来
    LaTeX 公式编辑之 把符号放在正下方
    Python 判断字符串是否含有指定字符or字符串
    Python 中使用 pandas Dataframe 删除重复的行
  • 原文地址:https://www.cnblogs.com/wuqiuxue/p/8342395.html
Copyright © 2011-2022 走看看