//这是关于嵌套函数和计时器函数的代码问题
var num = 0; //the key of this problem
var timer = null;
timer = setInterval(function() {
//num could change from 0 to 9 in this function
console.log(num);
setTimeout(function() {
console.log(num); //but in this place, num is always 0,why?
}, 2000);
num++;
if (num >= 10) {
num = 0;
clearInterval(timer);
}
}, 100);
为什么我无法读取嵌套函数中全局变量的变化?
你是。这只是一个逻辑错误,你的时间setTimeout
会出现回调,你已经把它回至0:您增加num
每100ms,当它达到10将其设置为0,然后停止增量过程。2000毫秒后,您将显示的值num
。那时,它将为0,因为它在10圈后以100毫秒的间隔(早一秒)达到了0。
换句话说,会发生以下情况:
num
0毫秒:您设置为0setInterval
0毫秒:您将重复间隔计时器()设置为100毫秒num
为1num
为2setTimeout
触发第一个回调,显示num = 0setTimeout
触发第二个回调,显示num = 0本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句