var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
return console.log(i)
// alert(i);
};
}
a[1]()
// 10
代码如上所示
想不明白,为什么输出的不是9
,而是10
。
不是for
循环10
次,i
的值从0
到9
吗?
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
return console.log(i)
// alert(i);
};
}
a[1]()
// 10
想不明白,为什么输出的不是9
,而是10
。
不是for
循环10
次,i
的值从0
到9
吗?
for循环执行的步骤你弄错了`for(var i = 0;i<10;i++){
内容
}`
第一步:初始条件,第二步:判断内容,第三步:判断条件成立执行循环体里的内容,第四步:最后一步才进行累加!!!所以当条件i = 9时条件还成立执行了循环体的内容后执行了for循环的第四步累加。当i=10的时候不符合循环条件跳出循环,所以为10.
不明白,那就把代码换成另一种姿势,你就明白了。
var a = [];
for (var i = 0; i < 10; ) {
i++
a[i] = function () {
return console.log(i)
// alert(i);
};
}
a[1]()
你的i是一个全局的变量,当你执行a[i]();的时候循环已经完成,i = 10;而执行函数 function(){console.log(i)}在当前函数的作用域中没有i,就回找到父级的i也就是10打印出来。
10 回答11.2k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
首先为什么不是9是10 9的那次循环结束不是要i++吗。i就等于10了呀!
第二,a数组里面放的是函数,函数只有在调用的时候才会被执行。你在for循环中根本就没有呗执行啊
只有在最后a[1]()这才被调用执行,此时i为10,所以是10