function a() {
for(i=0;i<4;i++){
b(i);
}
}
function b(j){
setTimeout(function(){
console.log(j);
},3000);
}
a();
有人可以向我解释如何根据事件队列和执行上下文执行上述代码吗?
根据我对JS的理解,我知道直到JS文件中的所有代码都完成后才会处理事件队列。所以首先在全局范围内调用a。然后在函数a()内部,出现一个for循环,它调用b四次。所以我的问题是在每次调用函数b时,会在事件队列中放置一个计时器事件。此计时器事件是否等待三秒,然后回调传递给setTimeout方法的函数?或者它只是在队列上放置一个计时器事件,然后返回到函数a,再次调用b,这将在队列中放置另一个计时器事件。所以基本上直到for循环没有完成调用b四次,3秒的定时器事件将不会启动。但是当它完成调用b四次时,放置在队列上的第一个计时器事件开始并回调传递给setTimeout参数的函数,并且因为闭包它知道j = 0.然后这发生在下一个队列中有3个事件?所以基本上直到JS文件中的所有代码都完成才处理事件,在这种情况下,它是函数b的三次调用?
如果我的理解完全错误,请在不阅读我的解释的情况下,以自己的方式解释上面的代码哈哈!
答案 0 :(得分:3)
此计时器事件是否等待三秒钟,然后回调传递给setTimeout方法的函数?或者它只是在队列上放置一个计时器事件,然后返回到函数a,再次调用b,这将在队列中放置另一个计时器事件。
后者。
撇开不会花费3秒钟来调用b
4次这一事实,JavaScript将永远不会在函数中间暂停以运行另一个函数,因为事件已被触发。忙于运行a()
以查看是否有任何超时事件等待运行。