问题代码
for(var i=0;i<10;i++){
console.log(i)
setTimeout(function(){
console.log(i)
},1000);
}
setTimeout是一次执行函数,这里是1秒后执行,仅仅执行一次;for(var i=0;i<10;i++),i的每次取值都是执行setTimeout这个函数,并没有执行setTimeout里面的function(即闭包函数),setTimeout里面的function是有setTimeout的定时触动的,也就是1秒后执行,也就是说i从0~9时,一共执行了10次的setTimeout()函数,此时的i的值是10,由于for语句的执行速度远小于1秒,所以,1秒后,由setTimeout()函数定时触动的闭包函数function()开始执行,alert(i);i的值已经是10了,所以相继打印10次i.
修改代码
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){
console.log(i)
},1000);}
)
(i)}