gpt4 book ai didi

javascript - 事件队列函数回调

转载 作者:行者123 更新时间:2023-11-29 19:20:23 24 4
gpt4 key购买 nike

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 的调用三次?

如果我的理解完全错误,请随意用你自己的话来解释上面这段代码,而无需阅读我的解释哈哈!

最佳答案

Does this timer event wait for three seconds and then callback the function that was passed to the setTimeout method? Or does it just place a timer event on the queue, then go back to function a, invoke b again, and this would place another timer event in the queue.

后者。

撇开调用 b 4 次不需要 3 秒这一事实,JavaScript 永远不会因为事件已触发而在一个函数中间暂停以运行另一个函数。运行 a() 会太忙而无暇查看是否有任何超时事件等待运行。

关于javascript - 事件队列函数回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333926/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com