for循环小知识

for循环中定义的变量。如for(var i=0;i<obj.length;i++)i 在for循环外也可以调用。但当for循环是在函数内部时,i 只能在此函数内部调用。for循环不在函数内部时 i 为全局变量。但此时的 i 调用指向的是for循环的最后一次循环++,即 i 为obj.length。在for循环外无论如何调用 i 都为obj.length

例:

var num=10;
var data = [];
for(var i=0;i<num;i++){
     data[i] = function(){
            console.log(i);
      };
}
 data[0]();
 data[1]();
 data[2]();

输出的结果不是0,1,2,。而是10。

由于for循环不是在一个方法体中,所以for循环中的 i 是a同级的变量,即全局变量,最终循环结束,i 保存在内存中不会马上销毁,所以你在for循环结束的时候输入 i 可以看到 i=10;

data[i] = function(){
console.log(i);
};

在for循环中相当于闭包,data[0]、data[1]、data[2] 函数内的变量 i 实际都是指向同一个地址,所以输出的值都是一样的。

不过值得注意的是,如果在for循环中声明变量为let的话,则输出的值则为 0、1、2,因为let是严格模式,声明的变量只在let命令所在的代码块有效果,也就是只有在for循环中有效。

posted on 2017-04-14 10:01  大鱼小虾米  阅读(320)  评论(0)    收藏  举报

导航