zoukankan      html  css  js  c++  java
  • 理解for循环的执行顺序

    1. 问题,for循环内部定义的函数内使用i
    var a =[];
    for(var i=0;i < 4; i++){
        a[i] = function () {
             console.log(i);   //一直显示4, 执行此代码时,同步代码for循环已经执行完成
        };
    }
    a[1]();   //4
    a[2]();   //4
    a[3]();   //4
    
    
    1. 解决1,添加.index到obj
    for(var i=0;i < 4; i++){
        btn[i].index=i;
        btn[i].onclick = function () {
             alert(this.index);   //0,1,2,3
        };
    }
    
    
    1. 解决2,使用let
    # 参考
    https://www.jianshu.com/p/84edd5cd93bd
    
    # 1
    var a =[];
    var b =[];
    for(var i=0;i < 4; i++){
        a[i] = function () {
             b[i]=i;   //一直显示4, 执行此代码时,同步代码for循环已经执行完成
        };
        a[i].index = i;
    }
    a[0]();
    a[1]();
    a[2]();
    a[3]();
    console.log(b); //[ <4 empty items>, 4 ]
    
    
    # 2
    var a =[];
    var b =[];
    for(let i=0;i < 4; i++){
        a[i] = function () {
             b[i]=i;   //i虽然在全局作用域声明,但是在for循环体局部作用域中使用的时候,变量会被固定,不受外界干扰。
        };
        a[i].index = i;
    }
    a[0]();
    a[1]();
    a[2]();
    a[3]();
    console.log(b); //[ 0, 1, 2, 3 ]
    
    
    
    
    
  • 相关阅读:
    【学习笔记】最小表示法
    bzoj1912【Apio2010】patrol 巡逻
    hdu1057
    hdu1056
    hdu1055
    hdu1054
    hdu1053
    hdu1052
    hdu1051
    hdu1050
  • 原文地址:https://www.cnblogs.com/amize/p/14731046.html
Copyright © 2011-2022 走看看