我是 JavaScript 的初学者,我已经尝试解决这个问题至少两个小时了。如果有人能向我解释为什么会这样,那就太好了!
function slowDouble(x, callback) {
setTimeout(function() {
callback(2 * x);
}, 500);
}
function slowDoubleTenTimes(x, callback) {
for (i = 0; i < 10; i++) {
slowDouble(x, function(result) {
x = result;
});
}
callback(x);
}
slowDoubleTenTimes(3, function(result){
console.log('The result of slowDoubleTenTimes is ' + result);
});
逻辑告诉我,在 slowDoubleTenTimes
中,
在 for 循环中,x
应该改变。
每次它在后续的 for 循环迭代中再次调用 slowDouble
时,
x
应该不同。
但是 x
仍然是 3
!
事实上,callback(x)
中的结果答案应该是 3072
。
然而,x
从 3
变为 6
,然后保持在 6
。
关于 JavaScript 有什么我不知道的吗 那会阻止结果改变吗?
此外,奇怪的是,如果我将 console.log("hi")
放在 for 循环之后,
控制台在 slowDouble
运行之前打印出“hi”。
slowDouble
不应该在 console.log("hi")
之前运行吗?
还是我对 setTimeout
的理解不正确?
谢谢!
最佳答案
slowDouble 不会阻塞。因此,立即调用“回调”。
setTimeout 表示,“在 500 毫秒内运行此函数”。但是,它不会阻塞,这意味着它会在注册后 500 毫秒后继续执行下一行。
关于javascript - for循环中的setTimeout,变量不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158711/