Javascript 异步代码执行

Javascript 异步代码执行,javascript,asynchronous,callback,settimeout,Javascript,Asynchronous,Callback,Settimeout,我一直在玩这个异步代码,虽然预计回调将在setTimeout后1毫秒后执行,val的值将是当时的值,所以我尝试增加val的重新分配,希望克服1毫秒的延迟,直到执行回调,但是,无论我添加了多少次val的重新分配,val的值始终是最后一次分配的值。所以问题是,所有这些重新分配是否发生得如此之快,以至于在执行回调之前1ms就足以执行它们,还是我遗漏了什么 function asyncFunction(callback) { setTimeout(callback, 1);

我一直在玩这个异步代码,虽然预计回调将在setTimeout后1毫秒后执行,val的值将是当时的值,所以我尝试增加val的重新分配,希望克服1毫秒的延迟,直到执行回调,但是,无论我添加了多少次val的重新分配,val的值始终是最后一次分配的值。所以问题是,所有这些重新分配是否发生得如此之快,以至于在执行回调之前1ms就足以执行它们,还是我遗漏了什么

    function asyncFunction(callback) {
       setTimeout(callback, 1);
    }

    var val= '1';

    asyncFunction(function() {
       console.log('The value is ' + val);
    });
    val= '2';
    val= '3';
    //...
    //... more asignments

    val = '1000'
JavaScript永远不会中断当前正在运行的函数来执行其他操作

将函数传递给
setTimeout
时,当以下所有条件均为真时,将调用该函数:

  • 指定的时间已过
  • setTimeout的最短时间已过
  • 没有其他正在执行的函数
进一步阅读:

阅读


需要注意的是,在调用setTimeout()的线程终止之前,函数或代码段无法执行。例如:

function foo() {
    console.log('foo has been called');
}
setTimeout(foo, 0);
console.log('After setTimeout');
将写入控制台:

After setTimeout
foo has been called
因为即使在延迟为零的情况下调用setTimeout,它也会被放置在队列中,并计划在下一次机会运行,而不是立即运行。当前正在执行的代码必须在执行队列上的函数之前完成,由此产生的执行顺序可能不符合预期