我是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
但是,x3更改为6,然后保持在6

关于JavaScript我有什么不知道的地方
这会阻止结果更改?

另外,奇怪的是,如果我在for循环后放置console.log("hi")
slowDouble运行之前,控制台会打印出“ hi”。
slowDouble不应在console.log("hi")之前运行吗?
还是关于setTimeout的某些内容我无法正确理解?

谢谢!

最佳答案

slowDouble不会阻止。因此,“回调”立即被调用。

setTimeout说,“在500毫秒内运行此功能”。但是,它不会阻塞,这意味着它在注册为要在500毫秒内调用后继续到下一行。

10-06 08:13