zoukankan      html  css  js  c++  java
  • javascript闭包使用 分类: JavaScript 2015-05-01 11:34 652人阅读 评论(3) 收藏

    之前看到一段代码,很是不能理解,然后就查找资料并且找网络上得大牛请教,最后弄懂了这段代码,然后就拿出来总结一下。

    1.挖坑

    先来看一段代码:

    var arrTest = [];
    for (var i = 0; i < 3; i++) {
        //注意函数没有传参数进入函数体
        arrTest.push(function () {
            console.log('>>>' + i);
        })
    }
    
    //arrTest=[function(){console.log('>>>'+i)}, function(){console.log('>>>'+i)}, function(){console.log('>>>'+i)}]
    
    console.log(arrTest[0].toString());  //function(){console.log('>>>',+i)}
    console.log(i);
    console.log('-------------');
    //长度可以使用l 简单的单词来代替,减小代码长度
    for (var i = 0, arrLength = arrTest.length; i < arrLength; i++) {
        console.log(i);
        arrTest[i]();
    }
    
    
    //验证的i的值
    console.log('i的值是' + i);     //i=3
    
    console.log('end for');
    for (var j = 0, arrLength = arrTest.length; j < arrLength; j++) {
        console.log(j);
        arrTest[j]();
    }
    
    arrTest = [function () { console.log('>>>' + i) }, function () { console.log('>>>' + i) }, function () { console.log('>>>' + i) }]
    

    结果是这个样子的:
    这里写图片描述

    那怎么实现当遍历整个函数的时候打印出我们所希望的0,1,2这样的结果呢?

    /*
    对函数进行改造,当执行循环的时候,打印0,1,2
     */
    var arrTest1 = [];
    for (var i = 0; i < 3; i++) {
        //构造一个立即执行的函数将函数的返回结果添加入数组中
        (function(n) {
            arrTest1.push(function() {
                console.log('>>>' + n);
            });
        })(i);
    }
    console.log(arrTest1);
    for (var i = 0, l = arrTest1.length; i < l; i++) {
        arrTest1[i]();
    }

    打印结果:
    这里写图片描述

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    [转]开源游戏AI引擎列表与游戏中的人工智能
    [转]刨根问底!曲面细分技术到底是个啥?
    [转]link time code generation
    [转]PythonQt
    [转]Free Game Development Libraries
    Java虚拟机(二):垃圾回收算法 时间
    Java虚拟机(一):JVM的运行机制 时间
    Java虚拟机(四):常用JVM配置参数 时间
    Java虚拟机(三):垃圾收集器 时间
    mov offset和lea的区别
  • 原文地址:https://www.cnblogs.com/yisuowushinian/p/4715606.html
Copyright © 2011-2022 走看看