zoukankan      html  css  js  c++  java
  • 闭包

    了解闭包(函数的函数)的肯定知道,输出的是10个10,但是你要具体解释呢?

    function test() {
        var arr=[];
        for(var i=0;i<10;i++){
            arr[i]=function () {
                console.log(i);
            }
        }
        return arr;
    }
    var myArr=test();
    for(var j=0;j<10;j++){
        myArr[j]();
    }
    //10,10,10,10,10,10,10101010

     我们需要知道console.log(i);这句是在什么时候调用的;

    return出去的时候还未被调用;

    是在给arr全部都返回出去了,才去调用的;

    此时i早已变成10了。

    test执行完后,test和ao已经断线。但是他的ao没有销毁的,被arr里面function有另一条线连接着;

    test里面的AO,i变量现在的结果是10,而且被arr里面每个function拽住;

    如想正确输入0,1,2,3,4,5,6,7,8,9,10

    1.立即执行函数

    function test() {
        var arr=[];
        for(var i=0;i<10;i++){
            (function(j){
               arr[j]=function () {
                   console.log(j);
                }
            })(i)
        }
        return arr;
    }
    var myArr=test();
    for(var j=0;j<10;j++){
        myArr[j]();
    }
    //0,1,2,3,4,5,6,7,8,9,10

    2.借用外部的参数

    function test() {
        var arr=[];
        for(var i=0;i<10;i++){
            arr[i]=function (num) {
               console.log(num);
             }
        }
        return arr;
    }
    var myArr=test();
    for(var j=0;j<10;j++){
        myArr[j](j);
    }
    //0,1,2,3,4,5,6,7,8,9,10
  • 相关阅读:
    登录及注册页面
    多方式登录
    git笔记
    后台主页模块设计
    auth模块迁移后需新增字段
    使用idea构建SpringBoot源码
    Springboot相关面试问题
    Springboot自动加载工具-devtools的理解与使用
    SpringBoot项目的一些简单常用配置
    Java线程池及Executor框架的理解
  • 原文地址:https://www.cnblogs.com/ssszjh/p/14361595.html
Copyright © 2011-2022 走看看