JavaScript 운영 체제 인 스 턴 스 분석
5535 단어 JavaScript운영 메커니즘
블 로그 처음 써 봐 요.
현재 1,2 학기 에 대학 2 학년 이 입문 하기 시 작 했 지만 오랫동안 구조 에 대한 간단 한 호출 이 었 고 이에 대해 깊이 연구 하지 않 았 기 때문에 이 블 로 그 는 자기 독촉 의 시작 이 었 다.이 블 로그 의 내용 은 얼마 전에 위 챗 애플 릿 전단 지 를 쓴 것 에서 비롯 되 었 는데 페이지 의 렌 더 링 순서 가 항상 자신의 예상 과 어 긋 나 는 것 을 발견 했다.그래서 최근 에 자 바스 크 립 트 운영 체제 에 관 한 블 로그 와 문 서 를 보고 기본 적 인 프레임 워 크 가 생 겼 다.그 다음 에 제 가 알 고 있 는 내용 을 자세히 살 펴 보 겠 습 니 다.
JavaScript 실행 순서
우선,JavaScript 는 순서대로 한 줄 한 줄 실 행 됩 니 다.그리고 JS 는 하나의 스 레 드 만 있 습 니 다.즉,두 개의 코드 를 동시에 실행 할 수 없습니다.즉,한 코드 가 실 행 될 때 그 뒤의 모든 코드 는 이 코드 가 실 행 될 때 까지 기 다 려 야 뒤의 것 이 계속 실 행 될 수 있 습 니 다.만약 그렇다면 사용자 체험 도가 매우 좋 지 않 을 것 이다.예 를 들 어 서버 에 요청 을 보 내 면 후속 코드 는 서버 가 결 과 를 되 돌려 줄 때 까지 기 다 려 야 사용자 가 새로운 조작 을 할 수 있다.
이 건 또 뭐야?
자 바스 크 립 트 실행 메커니즘 상세 설명
JavaScript 실행 스 택
JavaScript 는 스 택 을 누 르 는 방식 으로 코드 를 실 행 했 습 니 다.처음에 실 행 했 을 때 스 택 이 비어 있 었 습 니 다.실행 이 시작 되면 JS 엔진 은 코드 를 스 택 밑 에 넣 었 습 니 다.이 코드 가 다른 함수 의 호출 을 포함 하지 않 으 면 호출 된 함 수 를 스 택 꼭대기 에 두 었 습 니 다.이 코드 가 다른 함수 의 호출 을 포함 하지 않 으 면 이 함 수 를 실 행 했 습 니 다.실행 이 끝 난 후에 스 택 에서 나 왔 습 니 다.이런 식 으로 유추 합 니 다.결국 창고 가 비 어 있 을 때 까지.
JavaScript 동기 화 작업 과 비동기 작업
사실 실제 JS 내 부 는 동기 화 작업 과 비동기 작업 이지 만 JS 단일 스 레 드 의 특징 을 바 꾸 지 않 았 습 니 다.
사건 순환 은 어떻게 발생 합 니까?
이상 하지 않 습 니까?상기 동기 화 작업 과 비동기 작업 의 수행 방식 에 따라 한 라운드 에 완 료 될 수 있 지 않 습 니까?또 무슨 Event Loop 입 니까?
이것 은 작은 세부 사항 입 니 다.비동기 임무 가 여러 개 존재 할 때 모든 비동기 임무 가 돌아 오 는 결과 에 필요 한 시간 이 다 릅 니 다.이 는 Event Queue 가 먼저 나 온 형식 으로 결 과 를 되 돌려 줄 을 서 는 것 이 존재 합 니 다.첫 번 째 비동기 임 무 는 결 과 를 되 돌려 줍 니 다.그러면 이 를 대열 의 첫 번 째 에 두 고 다음 비동기 임 무 는 그 다음 에 이렇게 줄 을 서 는 것 입 니 다.메 인 라인 이 비어 있 을 때(즉 동기 화 작업 이 끝 난 후)이벤트 큐 에서 이 벤트 를 읽 고 메 인 라인 에 넣 어 실행 합 니 다.그리고 순환 은 Event Queue 가 실 행 된 후에 시간 이 지나 면 이전의 비동기 작업 이 결 과 를 되 돌려 줍 니 다.Event Queue 에 놓 으 면 모니터 가 Event Queue 가 비어 있 지 않 고 메 인 스 레 드 가 Event Queue 의 작업 을 다시 수행 하기 시작 합 니 다.
매크로 퀘 스 트 와 마이크로 퀘 스 트
정 의 를 설명 하기 전에 우 리 는 먼저 비동기 작업 에 대해 설명 한다.
실행 과정:
console.log('1');
setTimeout(function() {
console.log('2');
process.nextTick(function() {
console.log('3');
})
new Promise(function(resolve) {
console.log('4');
resolve();
}).then(function() {
console.log('5')
})
})
process.nextTick(function() {
console.log('6');
})
new Promise(function(resolve) {
console.log('7');
resolve();
}).then(function() {
console.log('8')
})
setTimeout(function() {
console.log('9');
process.nextTick(function() {
console.log('10');
})
new Promise(function(resolve) {
console.log('11');
resolve();
}).then(function() {
console.log('12')
})
})
// :ssssyoki
// :https://juejin.im/post/59e85eebf265da430d571f89
// :
출력 순서:1,7,6,8,2,4,3,5,9,11,10,12
총결산
이 블 로그 에는 당신 이 듣 지 못 한 명사 나 방법 이 포함 되 어 있 을 지도 모 르 지만,나 는 그것 에 대해 상세 하 게 설명 하지 않 았 습 니 다.그 이 유 는 개인 적 으로 자 료 를 볼 때 모 르 는 것 을 자주 만 나 기 때문에 저 는 스스로 찾 아 보고 이해 하 는 것 을 선택 합 니 다.그러면 기억 과 이해 에 더욱 효과 적 이 고 단 어 를 찾 는 것 과 똑 같 습 니 다.만약 에 텍스트 에서 직접 알려 주면 오히려 중시 하지 않 습 니 다.
관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.