在知乎看到的一个题目,不明白为什么结果是123
for(var i=1;i<=4;i++){
var time=setTimeout(function(i){
clearTimeout(time);
console.log(i);
},1000,i);
}
//输出结果1,2,3
在知乎看到的一个题目,不明白为什么结果是123
for(var i=1;i<=4;i++){
var time=setTimeout(function(i){
clearTimeout(time);
console.log(i);
},1000,i);
}
//输出结果1,2,3
这是因为for循环是同步的,而时间模块比如setTimeOut是异步的同步做完了异步可能还在处理中,所以出来的结果会先前于之前的操作,至于为什么不是1234 是因为你每次清楚了下超时调用,不满足条件退出循环最后输出123
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
打印一句
console.log("cleartime:", time)
,你就明白了为什么最后一次 4 没有打印出来.也就是说,虽然通过定时器传参避免了
i
共享, 但是var time
却共享,每次都是清除的ID4
, 所以最后4没有打印出来.