//这是关于嵌套函数和计时器函数的代码问题
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);Run Code Online (Sandbox Code Playgroud)
为什么我无法读取嵌套函数中全局变量的变化?
你是.这只是一个逻辑错误,当您的setTimeout回调发生时,您已将其设置回 0:您num每100ms 递增一次,当它达到10时将其设置为0然后停止递增过程.在2000ms之后,你显示的值num.此时,它将为0,因为它以10毫秒的间隔以100毫秒的间隔达到0,比较早一秒.
换句话说,这是发生的事情:
num为0setInterval在100ms 设置重复间隔计时器()num为1num为2setTimeout回调触发,显示num = 0setTimeout回调触发,显示num = 0| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |