Javascript 为什么我能';t读取嵌套函数中全局变量的变化?
//这是一个关于嵌套函数和计时器函数的代码问题Javascript 为什么我能';t读取嵌套函数中全局变量的变化?,javascript,nested-function,Javascript,Nested Function,//这是一个关于嵌套函数和计时器函数的代码问题 var num=0//这个问题的关键 var定时器=null; 计时器=设置间隔(函数(){ //此函数中的num可以从0更改为9 console.log(num); setTimeout(函数(){ console.log(num);//但是在这里,num总是0,为什么? }, 2000); num++; 如果(num>=10){ num=0; 清除间隔(计时器); } }, 100); 为什么我不能读取嵌套函数中全局变量的变化 你是。这只是一
var num=0//这个问题的关键
var定时器=null;
计时器=设置间隔(函数(){
//此函数中的num可以从0更改为9
console.log(num);
setTimeout(函数(){
console.log(num);//但是在这里,num总是0,为什么?
}, 2000);
num++;
如果(num>=10){
num=0;
清除间隔(计时器);
}
}, 100);代码>
为什么我不能读取嵌套函数中全局变量的变化
你是。这只是一个逻辑错误,当您的setTimeout
回调发生时,您已经将其设置回0:您每100ms递增一次num
,当它达到10时将其设置为0,然后停止递增过程。2000ms后,显示num
的值。在这一点上,它将是0,因为它在以100ms的间隔进行10次循环后达到了0,比前一秒早
换言之,发生的情况如下:
时间0ms:将num
设置为0
时间0ms:将重复间隔计时器(setInterval
)设置为100ms
时间~100ms:第一次点火间隔:
它设置2000毫秒后的第一次回调
将num
更改为1
时间~200ms:间隔第二次点火:
它设置2000毫秒后的第一次回调
将num
更改为2
这种情况在~300ms(num->3)、~400ms(num->4)、~500ms(num->5)、~600ms(num->6)、~700ms(num->7)、~800ms(num->8)、~900ms(num->3)时再次发生
时间~1000ms:上次点火的间隔:
它设置了2000毫秒后的另一个回调
它将num设置为10,然后设置为0并取消间隔
时间~2100ms:第一次setTimeout
回调触发,显示num=0
时间~2200ms:第二次setTimeout
回调触发,显示num=0
……等等
为什么我不能读取嵌套函数中全局变量的变化
你是。这只是一个逻辑错误,当您的setTimeout
回调发生时,您已经将其设置回0:您每100ms递增一次num
,当它达到10时将其设置为0,然后停止递增过程。2000ms后,显示num
的值。在这一点上,它将是0,因为它在以100ms的间隔进行10次循环后达到了0,比前一秒早
换言之,发生的情况如下:
时间0ms:将num
设置为0
时间0ms:将重复间隔计时器(setInterval
)设置为100ms
时间~100ms:第一次点火间隔:
它设置2000毫秒后的第一次回调
将num
更改为1
时间~200ms:间隔第二次点火:
它设置2000毫秒后的第一次回调
将num
更改为2
这种情况在~300ms(num->3)、~400ms(num->4)、~500ms(num->5)、~600ms(num->6)、~700ms(num->7)、~800ms(num->8)、~900ms(num->3)时再次发生
时间~1000ms:上次点火的间隔:
它设置了2000毫秒后的另一个回调
它将num设置为10,然后设置为0并取消间隔
时间~2100ms:第一次setTimeout
回调触发,显示num=0
时间~2200ms:第二次setTimeout
回调触发,显示num=0
……等等