关于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次 ?
每次的执行流程具体是什么样的呢? 展开
setTimeout(function() {
console.log(i);
}, 1000);
}
上面的代码不会输出数字 0 到 9,而是会输出数字 10 十次。
为什么会输出数字10 10次 ?
每次的执行流程具体是什么样的呢? 展开
展开全部
//上边的代码没有用闭包,循环10次瞬间就过去了,而你的定时器还没有被触发,所以会输出10,
//并且只输出1次,如果加上闭包,就会输出0-9,输出10次:
for(var i = 0; i < 10; i++) {
(function(index){
setTimeout(function() {
console.log(index);
}, 1000);
})(i);
}
更多追问追答
追问
为什么是10呢 应该是9啊 不明白?
追答
每一次闭包,都是立即执行。
展开全部
这是循环开启10次定时器么?这瞬间会发生什么....
输出10次10,那就是循环太快,i加到10以后了,显示方法才执行...
循环用的局部变量i,对显示方法来说是全局变量,不是启动的时候就固定了的意思?
输出10次10,那就是循环太快,i加到10以后了,显示方法才执行...
循环用的局部变量i,对显示方法来说是全局变量,不是启动的时候就固定了的意思?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把for执行完之后再一次执行setTimeout中的函数。
for执行完之后i变成10了。所以你知道的。
for执行完之后i变成10了。所以你知道的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询