我是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我有什么不知道的地方
这会阻止结果更改?
另外,奇怪的是,如果我在for循环后放置
console.log("hi")
,在
slowDouble
运行之前,控制台会打印出“ hi”。slowDouble
不应在console.log("hi")
之前运行吗?还是关于
setTimeout
的某些内容我无法正确理解?谢谢!
最佳答案
slowDouble不会阻止。因此,“回调”立即被调用。
setTimeout说,“在500毫秒内运行此功能”。但是,它不会阻塞,这意味着它在注册为要在500毫秒内调用后继续到下一行。