목차
먼저 코드를 살펴보세요
싱글 스레드
JS执行机制
JS如何判断执行栈为空
异步任务
常见的宏任务
常见的微任务
答案
分析
如果没有后续代码,打印顺序如下
继续走流程
🎜일반적인 매크로 작업🎜
🎜공통 마이크로태스크🎜
🎜계속해서 프로세스를 따르세요🎜
지금까지는 동기 작업 대기열
대기열
Postscript
웹 프론트엔드 JS 튜토리얼 JS의 이벤트 실행 메커니즘에 대한 심층 분석

JS의 이벤트 실행 메커니즘에 대한 심층 분석

Mar 29, 2022 pm 07:49 PM
javascript

이 기사는 코드 조각의 인쇄 순서를 분석하여 JavaScript의 이벤트 실행 메커니즘에 대한 심층적인 이해를 제공할 것입니다.

JS의 이벤트 실행 메커니즘에 대한 심층 분석

얼마 전 필기시험 문제 때문에 조금 헷갈렸어요. 오늘은 JS의 이벤트 실행 메커니즘을 철저하게 분석하겠습니다. [관련 권장사항: javascript 학습 튜토리얼]

먼저 코드를 살펴보세요

친구들이 인쇄 순서를 써볼 수 있습니다

JS의 이벤트 실행 메커니즘에 대한 심층 분석

싱글 스레드

JS 주로 브라우저 스크립팅 언어로서 Js의 주요 목적은 JSJS인 경우 단일 스레드여야 함을 결정하는 DOM을 작동하는 것입니다. code>는 Java와 비슷합니다. 또한 두 개의 스레드가 동시에 DOM을 작동하는 경우 브라우저는 이를 어떻게 수행해야 합니까? <code>JS主要作为浏览器的脚本语言,Js的主要用途是操作DOM,这就决定了JS必须是单线程,如果JS如Java一样是多线程,如果两个线程同时操作DOM,那么浏览器应该怎么执行呢?

JS的发布其实是为了蹭Java的热度,其中编写这门语言的时间并不久,所以这也就是为什么JS是单线程的原因

JS执行机制

JS既然是单线程,那么必然会对任务进行一个排序。所有的任务都将按照一个规则执行下去。

  • 同步任务

  • 异步任务

JS의 이벤트 실행 메커니즘에 대한 심층 분석

同步任务和异步任务进入执行栈中,JS会先判断任务的类型

  • 是同步任务,直接进入主线程

  • 是异步任务,进入Event Table中,注册回调函数Event Queue

  • 同步任务全部执行结束,JS会Event Queue中读取函数执行

  • 这个过程会反复执行,直到全部任务执行结束。这就是我们常说的事件循环

JS如何判断执行栈为空

emmmm,我不知道。。。。JS应该有一套自己独有的逻辑去判断执行栈是否为空。

异步任务

异步的任务执行顺序为:宏任务——>微任务

异步任务可分为

  • 宏任务

  • 微任务

常见的宏任务

  • I/0

  • setTimeout

  • setInterval

常见的微任务

  • Promise

  • .then

  • .catch

答案

vite 之前配置的一个插件,版本有些问题,不要管这个红色报警

JS의 이벤트 실행 메커니즘에 대한 심층 분석

分析

  • 开始了 是一个同步任务,最先进入执行栈中

  • 执行task()函数, a是一个同步任务,进入执行栈中

  • async/await 是异步转同步的过程,第一行代码会同步执行,以下的代码会异步。b作为一个同步任务进入执行栈中

  • a end成为了异步任务的微任务,进入执行栈中,

目前为止,同步任务队列依次是 开始了, a, b

目前为止,异步任务队列依次是 宏任务: setTimeout 微任务:a end

如果没有后续代码,打印顺序如下

JS의 이벤트 실행 메커니즘에 대한 심층 분석

那么问题来了,不是说宏任务会比微任务提前执行吗,为什么setTimeout打印在a end之后呢?

看这张图

JS의 이벤트 실행 메커니즘에 대한 심층 분석

setTimeout 作为了宏任务进入了任务队列。所以造成了这种原因

通俗来讲:

async await 导致了微任务的产生,但是这个微任务所属于当前的宏任务。所以会先执行a end,执行完毕判断当前宏任务结束。执行下一个宏任务,打印出了setTimeout

继续走流程

  • c 由于Promise的转化,变为同步任务进入到任务队列中

  • c end 作为Promise衍生的微任务进入任务队列

  • d

    JS의 출시는 실제로 Java의 인기를 활용하기 위한 것입니다. 언어가 작성된 지 얼마 되지 않아서 JS가 단일 스레드인 이유입니다🎜

    🎜JS 실행 메커니즘🎜🎜🎜JS는 단일 스레드이므로 작업을 정렬해야 합니다. 모든 작업은 규칙에 따라 실행됩니다. 🎜
    • 🎜동기 작업🎜
    • 🎜비동기 작업🎜
    🎜JS의 이벤트 실행 메커니즘에 대한 심층 분석🎜🎜동기 작업과 비동기 작업이 실행 스택에 들어가고, JS는 먼저 작업 유형을 결정합니다🎜
      🎜는 동기 작업이며 메인 스레드에 직접 들어갑니다🎜

  • 🎜는 비동기 작업입니다. 이벤트 테이블을 입력하고 콜백 함수 이벤트 큐를 등록합니다. 🎜
  • 🎜모든 동기화 작업이 실행된 후 JS는 이벤트 큐에서 함수를 읽고 실행합니다.🎜
  • 🎜이 프로세스는 모든 작업이 실행될 때까지 반복적으로 실행됩니다. 이것이 우리가 흔히 이벤트 루프라고 부르는 것입니다🎜

🎜JS는 실행 스택이 비어 있는지 어떻게 판단합니까🎜 h4>🎜 음, 모르겠어요. . . . JS에는 실행 스택이 비어 있는지 확인하는 고유한 논리가 있어야 합니다. 🎜

🎜비동기 작업🎜🎜🎜비동기 작업 실행 순서는 다음과 같습니다: 매크로 작업 -> 마이크로 작업 🎜🎜비동기 작업은 🎜
  • 🎜 매크로로 나눌 수 있습니다. 🎜
  • 🎜마이크로 작업🎜

🎜일반적인 매크로 작업🎜

  • 🎜 I/ 0🎜
  • 🎜setTimeout🎜
  • 🎜setInterval🎜

🎜공통 마이크로태스크🎜

  • 🎜Promise🎜
  • 🎜.then🎜
  • 🎜.catch🎜

답변🎜🎜vite 이전에 구성된 플러그인이 있습니다. 버전에 문제가 있습니다. 이 빨간색 알람은 무시하세요🎜🎜JS의 이벤트 실행 메커니즘에 대한 심층 분석🎜

분석🎜
  • 🎜시작됨는 동기 작업이며 실행 스택에 가장 먼저 들어갑니다. 🎜
  • 🎜 task() 함수를 실행합니다. 🎜
  • 🎜스택의 async/await는 비동기에서 동기로 진행되는 프로세스이며, 다음 코드는 비동기로 실행됩니다. b는 동기 작업으로 실행 스택에 들어갑니다. 🎜
  • 🎜a end는 비동기 작업의 마이크로태스크가 되어 실행 스택에 들어갑니다. 🎜 li>
🎜🎜지금까지 동기화 작업 대기열은 Started, a, b🎜🎜🎜🎜지금까지, 비동기 작업 대기열은 차례로 매크로 작업입니다: setTimeout 마이크로 작업: a end🎜🎜

🎜후속 코드가 없는 경우 , 인쇄 순서는 다음과 같습니다🎜🎜🎜4. png🎜 🎜그렇다면 매크로 작업이 마이크로 작업보다 먼저 실행된다는 뜻이 아닌가요? 왜 a end 뒤에 setTimeout가 인쇄되나요? 🎜🎜이 사진을 보세요🎜🎜JS의 이벤트 실행 메커니즘에 대한 심층 분석🎜🎜setTimeout은 매크로 작업으로 작업 대기열에 들어갑니다. 그래서 그 이유는 🎜🎜평신도의 용어로 말하면: 🎜🎜async Wait는 마이크로 작업의 생성으로 이어지지만 이 마이크로 작업은 현재 매크로 작업에 속합니다. 따라서 a end가 먼저 실행되고, 실행 후에는 현재 매크로 작업이 종료된 것으로 판단됩니다. 다음 매크로 작업을 실행하고 setTimeout을 인쇄하세요🎜

🎜계속해서 프로세스를 따르세요🎜

  • 🎜 c Promise 변환으로 인해 동기 작업이 되어 작업 큐에 들어갑니다🎜
  • 🎜c end 파생된 마이크로 작업으로 작업 큐에 들어갑니다. Promise🎜
  • 🎜d는 동기화 작업으로 작업 대기열에 들어갑니다🎜

지금까지는 동기 작업 대기열

  • a

  • b

  • c

  • d

대기열

  • 엔드 마이크로 Task

  • c end Microtask

  • setTimeout Macrotask

인쇄 순서는 다음과 같습니다

JS의 이벤트 실행 메커니즘에 대한 심층 분석

Postscript

제가 이해한 JS 실행 메커니즘이 정확하지 않을 수 있습니다. 상사가 지적했다.

【추천 관련 동영상 튜토리얼: 웹 프론트엔드

위 내용은 JS의 이벤트 실행 메커니즘에 대한 심층 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 Dec 17, 2023 pm 02:54 PM

WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 Dec 17, 2023 pm 12:09 PM

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 Dec 17, 2023 am 09:39 AM

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 JavaScript와 WebSocket: 효율적인 실시간 일기예보 시스템 구축 Dec 17, 2023 pm 05:13 PM

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

자바스크립트에서 insertBefore를 사용하는 방법 자바스크립트에서 insertBefore를 사용하는 방법 Nov 24, 2023 am 11:56 AM

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript 및 WebSocket: 효율적인 실시간 이미지 처리 시스템 구축 JavaScript 및 WebSocket: 효율적인 실시간 이미지 처리 시스템 구축 Dec 17, 2023 am 08:41 AM

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.

See all articles