JavaScript 실행 메커니즘 자세히 보기
5886 단어 JavaScript실행 메커니즘
javascript는 단일 스레드 언어로 최신 HTML5에서 웹 Worker를 제기했지만 javascript는 단일 스레드라는 핵심은 아직 바뀌지 않았다.
왜 js는 단일 라인의 언어입니까?최초의 js는 브라우저 검증 폼에서 DOM 요소를 조작하는 데 사용되었기 때문이다.만약 js가 다중 루트라면 두 개의 루트가 동시에 하나의 DOM에 대해 서로 충돌하는 조작을 한다면 브라우저의 해석은 실행할 수 없습니다.
Web Worker의 역할은 JavaScript를 위한 다중 스레드 환경을 만들고 주 스레드가 Worker 스레드를 만들 수 있도록 하며 일부 작업을 후자에게 분배하여 실행하는 것이다.주 스레드가 실행되는 동안 Worker 스레드는 백그라운드에서 실행되며 서로 간섭하지 않습니다.Worker 스레드가 계산 작업을 완료한 후에 결과를 주 스레드로 되돌려줍니다.
2. 자바스크립트 이벤트 순환
우리가 방법을 호출할 때 js는 이 방법에 대응하는 실행 환경 (context) 을 생성하고 실행 상하문이라고도 부른다.이 실행 환경에는 이 방법의 개인 작용역, 상부 작용역의 지향, 방법의 매개 변수, 이 작용역에 정의된 변수와 이 작용역의this 대상이 존재한다.일련의 방법이 순서대로 호출될 때 js는 단일 노선이기 때문에 같은 시간에 하나의 방법만 실행할 수 있기 때문에 이런 방법은 하나의 단독 장소에 줄을 서 있다.이곳은 집행창고라고 불린다.
js 엔진이 비동기 이벤트를 만났을 때 결과가 돌아오기를 기다리지 않고 이 이벤트를 끊고 창고의 다른 작업을 계속 수행합니다.
비동기 이벤트가 결과를 되돌려주면 js는 이 이벤트를 현재 실행 창고와 다른 다른 대기열에 추가합니다. 우리는 이벤트 대기열이라고 합니다.이벤트 대기열에 넣으면 즉시 리셋을 실행하지 않고 현재 실행 창고의 모든 작업이 완료되기를 기다립니다. 메인 라인이 유휴 상태일 때, 메인 라인은 이벤트 대기열에 작업이 있는지 찾습니다.만약 있다면, 메인 라인은 그 중에서 첫 번째 이벤트를 추출하고, 이 이벤트에 대응하는 리셋을 실행 창고에 넣고, 그 중의 동기화 코드를 실행합니다.이렇게 반복하면 무한한 순환이 이루어진다.
셋, setTimeout
set Timeout 이 함수는 지정된 시간을 거친 후 실행할 작업을 Event Queue에 추가하는 것입니다. 또한 단일 스레드 작업이기 때문에 하나씩 실행해야 합니다. 만약에 앞의 작업이 너무 오래 걸리면 기다릴 수밖에 없습니다.
setTimeout(() => {
task()
},3000)
sleep(10000000)
상기 코드가 task () 를 실행하는 데 걸리는 시간은 3초를 훨씬 넘습니다. 실행 과정은 다음과 같습니다. setTimeout(fn,0)
의 의미는 어떤 임무가 메인 라인에서 가장 먼저 얻을 수 있는 여가 시간에 실행되도록 지정하는 것이다. 즉, 몇 초만 더 기다리지 않고 메인 라인에서 실행 창고 안의 동기화 임무를 모두 수행하면 창고가 비어 있으면 바로 실행한다는 것이다.넷째, setInterval
실행 순서에 대해 setInterval은 지정한 시간마다 등록된 함수를 EventQueue에 설정합니다. 앞의 작업이 너무 오래 걸리면 기다려야 합니다.
유일하게 주의해야 할 점은 setInterval(fn, ms)에 대해 말하자면, 우리는 ms초마다 fn을 실행하는 것이 아니라, ms초마다 fn이 이벤트Queue에 들어간다는 것을 이미 알고 있다.
5. Promise와 process.nextTick(callback)
Promise는 비동기 프로그래밍의 해결 방안으로 전통적인 해결 방안인 리셋 함수와 사건보다 더욱 합리적이고 강력하다.
이른바 Promise란 간단하게 말하면 하나의 용기로 미래에 끝날 사건(일반적으로 비동기적인 조작)의 결과를 저장하고 있다.문법적으로 프로미스는 비동기적인 조작에 대한 정보를 얻을 수 있는 대상이다.Promise는 다양한 비동기식 작업을 동일한 방법으로 처리할 수 있는 통일된 API를 제공합니다.
process.nextTick(callback)은 node와 유사합니다.js 버전의 "setTimeout"은 이벤트 순환의 다음 순환에서 콜백 리셋 함수를 호출합니다.
6. 매크로 작업 및 마이크로 작업
이벤트 순환의 순서, js 코드의 실행 순서를 결정합니다.
전체 코드 (매크로 작업) 에 들어간 후 첫 번째 순환을 시작합니다.이어서 모든 미세한 임무를 집행하다.그리고 다시 매크로 작업에서 시작하여 작업 대기열 중 하나가 실행된 것을 찾고 모든 마이크로 작업을 수행합니다.
setTimeout(function() {
console.log('setTimeout');
})
new Promise(function(resolve) {
console.log('promise');
}).then(function() {
console.log('then');
})
console.log('console');
1.async는 어떤 일을 합니까?
async 키워드를 가진 함수입니다. 함수의 반환값은 반드시promise 대상입니다.
즉, async 키워드 함수가promise가 아니라면 자동으로 Promise를 사용합니다.resolve () 포장.만약 async 키워드 함수가promise를 현저하게 되돌려준다면, 당신이 되돌려준promise를 기준으로 합니다.
2. await는 무엇을 기다리고 있습니까?
await 등은 오른쪽 표현식의 결과입니다.즉, 오른쪽이 함수라면 함수의return값은'표현식의 결과'입니다.오른쪽이'hello'또는 어떤 값이라면 표현식의 결과는'hello'입니다.
3.await 기다린 후에 무슨 일을 했습니까?
await 오른쪽 표현식의 결과는 await가 기다려야 할 것이다.그 후에 await에 대해 두 가지 상황으로 나눈다.
만약에promise 대상을 기다린다면await도async 뒤에 있는 코드를 멈추고 async 밖에 있는 동기화 코드를 실행하고 Promise 대상fulfilled를 기다린 다음에resolve의 매개 변수를await 표현식의 연산 결과로 삼을 것입니다.
4. 예
async function async1() {
console.log('async1 start');
await async2();
console.log('async1 end');
}
async function async2() {
console.log('async2');
}
console.log('script start');
setTimeout(function () {
console.log('setTimeout');
}, 0);
async1();
new Promise(function (resolve) {
console.log('promise1');
resolve();
}).then(function () {
console.log('promise2');
});
console.log('script end');
이상은 자바스크립트의 실행 메커니즘에 대한 상세한 내용입니다. 자바스크립트의 실행 메커니즘에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.