<script> for(var i=0;i<10;i++){ setTimeout(function(){ alert(i); },1000); } </script> 5
这个闭包为什么每次只打印10,并且是在for循环完成之后才打印的?<script>for(vari=0;i<10;i++){setTimeout(function(){a...
这个闭包为什么每次只打印10,并且是在for循环完成之后才打印的?
<script>
for(var i=0;i<10;i++){
setTimeout(function(){
alert(i);
},1000);
}
</script> 展开
<script>
for(var i=0;i<10;i++){
setTimeout(function(){
alert(i);
},1000);
}
</script> 展开
3个回答
展开全部
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循环执行完成还不到0.1秒,这样等十个对话框分别弹出来时i的值已经是10了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<script>
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){
alert(i);
},1000);
})(i)
}
</script>
这样就对了,这个涉足闭包的问题,有点复杂,记住格式就是了
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){
alert(i);
},1000);
})(i)
}
</script>
这样就对了,这个涉足闭包的问题,有点复杂,记住格式就是了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询