zoukankan      html  css  js  c++  java
  • for循环与闭包

    Es5

    function box(){
        var arr = [];
        for(var i=0;i<5;i++){
            arr[i] = (function(num){                    //自我执行,并传参(将匿名函数形成一个表达式)(传递一个参数)
                return num;                            //这里的num写什么都可以                    
            })(i);                                    //这时候这个括号里面的i和上面arr[i]的值是一样的都是取自for循环里面的i                            
        }                                            
        return arr;
    }

    在for循环里面的匿名函数执行 return i 语句的时候,由于匿名函数里面没有i这个变量,所以这个i他要从父级函数中寻找i,而父级函数中的i在for循环中,当找到这个i的时候,是for循环完毕的i,也就是5,所以这个box得到的是一个数组[5,5,5,5,5]。

    ES6

    function box(){
        var arr = [];
        for(let i=0;i<5;i++){        //使用let声明块级变量
            arr[i] = function(){
                return i;
            }
        }
        return arr;
    }
    var b = box();
    alert(b[0]());   //0
    function box(){
        var arr = [];
        for(var i=0;i<5;i++){
            arr[i] = (function(num){                    //自我执行,并传参(将匿名函数形成一个表达式)(传递一个参数)
                return num;                            //这里的num写什么都可以                    
            })(i);                                    //这时候这个括号里面的i和上面arr[i]的值是一样的都是取自for循环里面的i                            
        }                                            
        return arr;
    }
  • 相关阅读:
    入门学习
    SQL语句
    Jmeter录制badboy
    post方式提交数据
    get向服务器提交数据
    手机端解析json
    生成JSON字符串
    新闻客户端
    从网络下载的图片加缓存功能
    消息队列机制messageQuene
  • 原文地址:https://www.cnblogs.com/gaidalou/p/10605454.html
Copyright © 2011-2022 走看看