이 실행 컨텍스트는 도대체 무엇입니까?!

JavaScript는 세계에서 가장 인기 있는 언어라는 평판을 받고 있으며, 전 세계 웹사이트의 98%가 프론트, 엔드 또는 양쪽 엔드 개발의 주요 소스로 JavaScript를 사용합니다.

그러나 JS는 내부적으로 어떻게 이렇게 인기 있고 강력하게 작동합니까?

호출 스택, 이벤트 루프, 콜백 큐, 마이크로 태스크 큐, 웹 API 모음을 포함하는 많은 기능과 도구가 포함된 JavaScript 런타임 환경 덕분에 이 모든 것이 가능합니다. .

호출 스택 내에서 코드는 한 번에 한 함수씩 실행됩니다. 코드가 실행될 때마다 실행 컨텍스트가 생성됩니다.

실행 컨텍스트는 변수 환경(메모리) 및 실행 스레드(코드)의 두 부분을 포함하는 가상 환경입니다.

변수 환경:



this 내부의 값은 코드 내부의 모든 변수와 함수를 등록하는 키:값 쌍으로 저장됩니다. 변수는 변수 자체로 저장되며 함수와 마찬가지로 크기에 관계없이 함수 전체를 저장하며 실제로 특정 예외가 있지만 전체 함수는 실행 컨텍스트 내부에 전체적으로 저장됩니다.

실행 스레드:



이 내부에서 모든 기능이 발생하고 코드는 한 줄씩 실행됩니다. JS는 단일 스레드 언어이므로 한 번에 한 줄의 명령만 실행할 수 있습니다.

다음은 Execution 컨텍스트를 잘못 그린 것입니다.

과정:



JS는 코드를 두 번 훑어보며 첫 번째 실행에서 모든 변수와 함수를 등록합니다. 함수는 그대로 등록되지만 변수의 경우 '정의되지 않음'으로 저장됩니다. 이는 변수가 정의되기 전에 변수에 액세스할 수 있지만 정의되지 않은 값을 반환한다는 의미입니다.

예를 들어:

console.log(a);
var a = 10;


이것은 콘솔에서 정의되지 않은 로그를 기록할 JS의 유효한 코드이지만 let/const가 아닌 var의 경우에만 가능합니다. 이것이 var, let 및 const의 차이점 중 하나입니다. 선언 전에 변수에 액세스하는 이러한 현상은 다른 블로그에서 자세히 설명하는 호이스팅입니다.

두 번째 실행에서는 코드를 한 줄씩 실행하고 변수가 정의될 ​​때마다 해당 변수의 값을 정의되지 않음에서 변수 환경 내부의 값으로 업데이트합니다.

실행이 완료되면 실행 컨텍스트가 호출 스택에서 제거됩니다.
베이스에서 코드가 실행될 때마다 Global Execution 컨텍스트가 생성되고 그 이후의 모든 Execution 컨텍스트가 그 위에 있습니다.

이것이 JS 런타임 내에서 코드가 실행되는 방식이지만 이것은 빙산의 일각일 뿐이며 JS 런타임 내에는 코드 실행에 역할을 하는 많은 도구가 있습니다!

당신이 좋아 바랍니다! :)

좋은 웹페이지 즐겨찾기