关于js 中 循环中的闭包 的问题

for(vari=0;i<10;i++){setTimeout(function(){console.log(i);},1000);}上面的代码不会输出数字0到9,而是会... for(var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}

上面的代码不会输出数字 0 到 9,而是会输出数字 10 十次。

为什么会输出数字10 10次 ?
每次的执行流程具体是什么样的呢?
展开
 我来答
百度网友46b235f5b2
推荐于2016-04-17 · TA获得超过1397个赞
知道小有建树答主
回答量:676
采纳率:100%
帮助的人:625万
展开全部
//上边的代码没有用闭包,循环10次瞬间就过去了,而你的定时器还没有被触发,所以会输出10,
//并且只输出1次,如果加上闭包,就会输出0-9,输出10次:
for(var i = 0; i < 10; i++) {
   (function(index){
       setTimeout(function() {
         console.log(index);  
       }, 1000);
    })(i);
}
更多追问追答
追问
为什么是10呢  应该是9啊 不明白?
追答
每一次闭包,都是立即执行。
幸福生活有肉吃
2014-04-09 · TA获得超过122个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:134万
展开全部
这是循环开启10次定时器么?这瞬间会发生什么....
输出10次10,那就是循环太快,i加到10以后了,显示方法才执行...
循环用的局部变量i,对显示方法来说是全局变量,不是启动的时候就固定了的意思?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhaoapk
2014-04-09 · TA获得超过3771个赞
知道大有可为答主
回答量:1343
采纳率:40%
帮助的人:1594万
展开全部
把for执行完之后再一次执行setTimeout中的函数。

for执行完之后i变成10了。所以你知道的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式