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值