简单理解JavaScript事件循环
  JQHgqRpfEpBc 2023年11月13日 22 0

什么是事件循环?

JavaScript是一种单线程语言,意味着它一次只能执行一个任务。然而,通过事件循环,JavaScript可以处理异步操作而不会阻塞主线程。

事件循环的核心思想是不断地从任务队列中取出任务并执行,然后再检查是否有新的任务进入队列。这个过程循环进行,因此得名“事件循环”。

事件循环的三个重要组成部分:

1. 调用栈(Call Stack)

调用栈用于存储执行上下文,每个函数调用都会在调用栈中创建一个新的执行上下文。当函数执行完成,执行上下文从栈中弹出。

function foo() {
  console.log('foo');
}

function bar() {
  foo();
  console.log('bar');
}

bar();

在上面的例子中,调用栈的状态会依次为:bar -> foo -> (empty)

2. 任务队列(Task Queue)

任务队列存储待执行的任务,每个任务都是一个函数。当调用栈为空时,事件循环会从任务队列中取出一个任务并放入调用栈中执行。

setTimeout(() => {
  console.log('Timeout callback');
}, 1000);

上述代码中,setTimeout的回调函数将在1秒后被添加到任务队列中。

3. 事件循环(Event Loop)

事件循环是一个持续运行的进程,不断地从任务队列中取出任务并将其推送到调用栈中执行。这个过程会一直进行,直到任务队列为空。

console.log('Start');

setTimeout(() => {
  console.log('Timeout callback');
}, 1000);

console.log('End');

上述代码的执行过程如下:

  1. 执行第一个console.log('Start'),输出Start
  2. 遇到setTimeout,将其回调函数添加到任务队列中。
  3. 执行第二个console.log('End'),输出End
  4. 调用栈为空,事件循环将从任务队列中取出setTimeout的回调函数执行,输出Timeout callback

希望通过本文的讲解,大伙对JavaScript事件循环有了更清晰的认识。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
JQHgqRpfEpBc