javascript - for循环中的setTimeout,变量不变

标签 javascript

我是 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 有什么我不知道的吗 那会阻止结果改变吗?

此外,奇怪的是,如果我将 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/

相关文章:

javascript - 如何在特定时间后加载 Canvas 数组?

javascript - Three.js WebGL 渲染器不更新面部的 Color 属性

javascript - 指示 html 对象的各种属性

javascript - Highcharts - 仅显示特定类别中的特定系列?

javascript - 确定最后选中的单选按钮

javascript - 如何使用 jQuery 检测是否有东西阻止了 Adsense?

javascript - 将 Promise 中的值传递或访问 API

javascript - 尽管使用了 jQuery,datepicker 仍然无法工作

javascript - 从桌面图标启动时,我可以使用 javascript 在 Google Chrome 中关闭窗口吗?

javascript - 我想使用 jquery 的 Contains 选择器