zoukankan      html  css  js  c++  java
  • 《javascript设计模式与开放实践》学习(三)函数的闭包1

    假设页面有上有5个div节点,通过循环给每个div绑定onclick实现弹出对应的编号。代码如下:

    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
    <div>5</div>
    <script>
        var nodes=document.getElementsByTagName('div');
        for (var i=0,len=nodes.length;i<len;i++){
            nodes[i].onclick=function () {
                alert(i+1);
            }
        };
    </script>

    运行后发现点击所有div都弹出6。原因是div节点onclick是异步触发的,触发的时候for循环早已结束,此时变量i的值是5。

    解决办法就是采用闭包,修改下JS代码如下:

    var nodes=document.getElementsByTagName('div');
        for (var i=0,len=nodes.length;i<len;i++){
            (function (i) {
                nodes[i].onclick=function () {
                    alert(i+1);
                }
            })(i)
    
        };

    书上还有一个例子,Object.prototype.toString()判断某个对象值属于哪种内置类型。

     for(var i=0,type;type=['String','Array','Number'][i++];)这块语法不是特别懂。
    var Type={}
        for(var i=0,type;type=['String','Array','Number'][i++];){
            (function (type) {
                Type['is'+type]=function (obj) {
                    var result= Object.prototype.toString.call(obj)==='[object '+type+']';
                    console.log(result);
                }
            })(type)
        };
    
        Type.isArray([]);//输出true
        Type.isString('str');//输出true
  • 相关阅读:
    数论-FTT 和 NTT
    数论-FFT高精度乘法
    树链剖分-模板题 HAOI2015
    图论-最小生成树模板
    图论-次短路求法
    图论-某图论专练 Round3 (April, 2018)
    动规-某动规专练 Round1 (April, 2018)
    动规-某动规专练 Round2 (April, 2018)
    Java IO: 并发IO
    Java IO: Reader And Writer
  • 原文地址:https://www.cnblogs.com/GallopingSnail/p/5870106.html
Copyright © 2011-2022 走看看