var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
变量i是var命令声明的,在全局范围内都有效,所以全局只有一个变量i。每一次循环,
变量i的值都会发生改变,而循环内被赋给数组a的函数内部的console.log(i),
里面的i指向的就是全局的i。也就是说,所有数组a的成员里面的i,指向的都是同一个i,导致运行时输出的是最后一轮的i的值,也就是 10。
以上是通俗的解释这段代码的原因
但是我想说的是有想过数组a的成员里面的i,指向的都是同一个i这句话对于a[i]里的i适用吗?
会不会有这么个想法,就是每次循环都是a[i]i的值同一个值
解释一下:
a[i] = function () {
console.log(i);
};
这里是对每个a[i]复制一个函数
只有当调用a[i]()这种格式才会被触发这个函数效果
也就是说
a[i] = function () {
console.log(i);
};
只是一个声明,并没有做console,log(i)输出操作
所以由于var声明的变量是全局的,所以最后用a[6]()传入的i值是循环最后赋值的i值
浙公网安备 33010602011771号