理解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 ]




posted @ 2021-05-05 09:51  该显示昵称已被使用了  阅读(178)  评论(0编辑  收藏  举报