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
  • 相关阅读:
    qt tableview中如何添加右键菜单且不可编辑单元格
    C++typedef struct和struct的区别
    Qt5配置winpCap
    C++虚函数和纯虚函数的用法和区别
    c++11 智能指针 unique_ptr、shared_ptr与weak_ptr
    C++ windows进程间通信
    C++并发多线程(一)
    Maven无法下载2.1.7.js7版本的itext依赖
    PostgreSQL
    SQL
  • 原文地址:https://www.cnblogs.com/ssszjh/p/14361595.html
Copyright © 2011-2022 走看看