<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>
展开
 我来答
gfddh990
2017-07-11
知道答主
回答量:1
采纳率:100%
帮助的人:960
展开全部
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.
zhenTMmafana
2012-05-11
知道答主
回答量:10
采纳率:0%
帮助的人:3.2万
展开全部
每次循环时都让对话框等待一秒,而for循环执行完成还不到0.1秒,这样等十个对话框分别弹出来时i的值已经是10了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友4ea643b82
2013-05-25 · 超过40用户采纳过TA的回答
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:75.9万
展开全部
<script>
for(var i=0;i<10;i++){
(function(i){
setTimeout(function(){
alert(i);
},1000);
})(i)
}
</script>
这样就对了,这个涉足闭包的问题,有点复杂,记住格式就是了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式