이것은 매우 기본적이지만 쉽게 간과되는 질문입니다. 누구나 이 방법을 사용하는 방법을 알고 있지만 프로세스가 무엇인지 자세히 연구하지 않았습니다.
<input type="text" value="a" name="input" onkeydown="alert(this.value)" /> <input type="text" value="a" name="input" onkeydown="var me=this;setTimeout(function(){alert(me.value)},0)" >
그래서 js는 항상 단일 스레드였으며 브라우저는 비동기를 달성하는 열쇠입니다.
다음은 인터넷에서 재현됩니다.
js가 되었습니다. 작업을 수행한다는 것은 작업 큐에서 작업을 추출하여 실행을 위해 메인 스레드에 넣는 것입니다. 아래에서 좀 더 깊이 이해해보자.
필립 로버츠의 연설 "도와주세요, 이벤트 루프에 갇혀 있습니다"에서 나온 그림은 매우 심오합니다!
방금 배운 개념을 그림과 일치시켜 보겠습니다. 위에서 언급한 비동기 작업을 위해 브라우저가 여는 스레드는 WebAPI로 총체적으로 이해될 수 있습니다. 위에서 언급한 작업 대기열은 우리가 메인 스레드라고 부르는 것입니다. 점선으로 구성된 부분입니다. 힙과 스택이 함께 js 메인 스레드를 구성합니다. 예를 들어 그림에는 메인 스레드인 foo() 함수가 있습니다. 함수 본문을 실행할 때 위의 함수가 여전히 실행되어야 함을 발견하여 함수가 실행되면 해당 함수가 스택에서 제거됩니다. 스택이 지워졌다는 것은 작업이 실행되었음을 의미합니다. 이때 콜백 큐에서 다음 작업을 검색하여 스택에 푸시합니다. 이 검색 프로세스를 이벤트 루프라고 합니다. 작업 대기열에 작업이 있습니다.
관련글:
js 비동기 파일로더에 대한 자세한 설명, js 비동기 로딩에 대한 자세한 설명
위 내용은 (일반적인 인터뷰 질문) setTimeout부터 js의 비동기 원리까지 js 기본의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!