我正在玩这个异步代码,虽然预计回调将在setTimeout后1 ms执行,而val的值将是它当时的值,所以我试图增加重新分配val希望克服1ms的延迟,直到执行回调,但无论我添加了多少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'
答案 0 :(得分:3)
JavaScript永远不会中断当前正在运行的函数来执行其他操作。
当您将函数传递给setTimeout
时,如果满足以下所有条件,则会调用该函数:
答案 1 :(得分:0)
阅读MDN - Reasons for Delays longer than specified。
请注意,在调用setTimeout()的线程终止之前,无法执行函数或代码段。例如:
function foo() {
console.log('foo has been called');
}
setTimeout(foo, 0);
console.log('After setTimeout');
将写入控制台:
After setTimeout
foo has been called
因为即使调用setTimeout时延迟为零,它也会被放置在一个队列中并被安排在下次机会运行,而不是立即运行。当前执行代码必须在执行队列上的函数之前完成,生成的执行顺序可能不是预期的。