//这是关于嵌套函数和计时器函数的代码问题
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);

答案 0 :(得分:5)
为什么我无法读取嵌套函数中全局变量的变化?
你是。这只是一个逻辑错误,当您的setTimeout
回调发生时,您已将设置回为0:您每100毫秒递增一次num
,当它达到10然后停止增量过程时将其设置为0。在2000ms之后,您将显示num
的值。此时,它将变为0,因为它以100ms的间隔在10次循环后达到0,比较早一秒。
换句话说,现在发生了什么:
num
设置为0 setInterval
)
num
更改为1 num
更改为2 setTimeout
回调触发,显示num = 0 setTimeout
回调触发,显示num = 0