zoukankan      html  css  js  c++  java
  • 闭包的生存周期

     var Type = {};
           
            for (var i = 0, type; type = ['String', 'Array', 'Number'][i++];) {
                (function (type) {
                    Type['is' + type] = function (obj) {
                        return Object.prototype.toString.call(obj)==='[object '+type+']';
                    }
                })(type);
            }  
            console.log(Type.isArray([]));    //true
            console.log(Type.isString(234));  //false
    • 利用闭包我们可以完成很多工作,下面这个比较经典的应用。
    • 点击不同的Div会弹出对应的下标
     <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div> 
        
        <script type="text/javascript">
            var nodes = document.getElementsByTagName('div');
            for (var i = 0; i < nodes.length; i++) {
                nodes[i].onclick = function () {
                    alert(i);
                } 
            }
        </script>
    • 经过测试你会发现上面的代码随便点击哪个Div都弹出4。这是因为onclick事件是异步触发的,当事件被触发的时候,for循环已经结束,此时的变量 i 已经变为4.
    • 解决办法就是用到闭包将循环的i值都封闭起来。如下:
    <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div> 
        
        <script type="text/javascript">
            var nodes = document.getElementsByTagName('div');
            for (var i = 0; i < nodes.length; i++) {
                (function (i) {
                    nodes[i].onclick = function () {
                        alert(i);
                    }
                })(i);
            }
        </script>
  • 相关阅读:
    程序写法
    2011年C++再次给力
    WIN7+LINUX双系统
    随机洗牌算法
    Eclipse快捷键大全
    Android 编程规范
    android Context 上下文的几点解析
    消息模式Toast.makeText的几种常见用法
    Eclipse的优化
    用PULL解析器解析XML文件
  • 原文地址:https://www.cnblogs.com/meiyh/p/6428045.html
Copyright © 2011-2022 走看看