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吗?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
首先为什么不是9是10 9的那次循环结束不是要i++吗。i就等于10了呀!
第二,a数组里面放的是函数,函数只有在调用的时候才会被执行。你在for循环中根本就没有呗执行啊
只有在最后a[1]()这才被调用执行,此时i为10,所以是10
for循环执行的步骤你弄错了`for(var i = 0;i<10;i++){
内容
}`
第一步:初始条件,第二步:判断内容,第三步:判断条件成立执行循环体里的内容,第四步:最后一步才进行累加!!!所以当条件i = 9时条件还成立执行了循环体的内容后执行了for循环的第四步累加。当i=10的时候不符合循环条件跳出循环,所以为10.
不明白,那就把代码换成另一种姿势,你就明白了。
你的i是一个全局的变量,当你执行a[i]();的时候循环已经完成,i = 10;而执行函数 function(){console.log(i)}在当前函数的作用域中没有i,就回找到父级的i也就是10打印出来。