[JS] 실행 컨텍스트, Lexical Environment & 호이스팅
해당 블로깅은 인프런의 강의를 들으며 공부한 내용을 정리한 글입니다.
ES5 기준 핵심 내용을 공부하면서 작성하는 블로깅
Context란 무엇일까?
사전적으로는 맥락
또는 문맥
이라고 나와있다.
자바스크립트에서 실행 컨텍스트란 무엇일까?
아마도 코드 흐름 또는 코드 맥락,문맥을 뜻하는것 같다.
동일한 조건 또는 환경을 지니는 코드 집단이라고 볼 수 있다.
이게 무슨말인가? ES5 기준으로 함수를 보면 이해할 수 있다.
코드를 보면서 확인해보자
var a = 1; function outer() { console.log(a); function inner() { console.log(a); var a = 3; } inner(); console.log(a); } outer(); console.log(a);
위의 코드를 보고 콘솔
이 찍히는 순서를 확인해보자.
var a = 1; function outer() { console.log(a); // 첫번 째 function inner() { console.log(a); // 두번 째 var a = 3; } inner(); console.log(a); // 세번 째 } outer(); console.log(a); // 네번 째
-
첫번째로
전역 컨텍스트
가 실행이 되면서var a
변수와function outer
함수를 수집(선언)한다.
이것을 호이스팅이라고도 한다. 호이스팅은 우리가 이해를 돕기위한 추상적인 개념이다. 호이스팅은 현재 컨텍스트의Lexical Environment
에 정보가 담기는(수집되는) 것이다. -
그 다음
전역 컨텍스트
에서a
에1
이라는 값이 할당 된다. -
그리고 outer를 호출하면서
outer 컨텍스트
가 실행된다. -
outer 컨텍스트
에서는function inner
함수를 수집(선언)하고, 첫번째줄 부터 실행을 하여 console.log(a);를 출력한다. 여기서 자바스크립트는 생각을 한다. 현재outer 컨텍스트
의Lexical Environment
에a
라는 변수가 수집이 되었는가?
수집이 되어있지 않다. 그럼outerEnvironmentReference
즉 현재컨텍스트 보다 외부
의Lexical Environment
를 찾아간다.
outer 컨텍스트
의 외부는전역 컨텍스트
이다. 여기로 올라가a
라는 변수를 찾고 그 값을 찾느다. 전역에는 선언되 할당이 되어있음으로 그제서야console
은1
이라는 값을 찍어준다. -
그런 다음
inner()
를 실행하고inner 컨텍스트
가 실행이 되는것이다. -
그러면
inner 컨텍스트
에서는 또 다시 수집(호이스팅
)이 발생하고,var a
를 수집한다. -
그 다음
inner 컨텍스트
의 첫번 째 코드인console.log(a)
를 출력하는데, 현재inner 컨텍스트
의Lexical Environment
에서a
라는 변수를 찾는다.
그리고 여기서 6번에서 수집한var a
를 찾았고 그 값을 출력하지만 아직 수집만 되어있고 값이 할당이 안되어있어 2번째console
은undefined
를 출력한다. -
그 다음
inner 컨텍스트
의 두번째 코드인a
변수에3
을 할당한다. 이 할당은inner Lexical Environment
에서 수집된a
에게 할당되는 것이다. 전역에 있는a
는 무시가 된다.
즉, 전역a
는1
이고 현재inner
의a
는3
이 된다.
그렇게inner 컨텍스트
끝이난다. -
그리고
outer 컨텍스트
로 돌아와 마지막console
을 실행한다. 이 때는4번
과 같이a
를전역 컨텍스트(Lexical Environment)
에서 찾아1
을 출력하고outer 컨텍스트
는 끝이 난다. -
마지막으로
전역 컨텍스트
의 마지막console
이 실행되고 여기서a
는 현재 자기의Lexical Environment
에 수집된a
를 읽어 출력하여1
이 출력된다.
그래서 출력의 결과는1, undefined, 1, 1
이라는 결과가 출력 된다.
- ES6문법에서는 inner()를 실행할 때 초기화를 하라는 에러를 발생시킨다.
호이스팅은 지금까지 단순 함수를 끌어올린다
라고 생각했지만, 실행 컨텍스트(흐름)을 보며 확인하니 원리를 보다 더 파악할 수 있었다.
Author And Source
이 문제에 관하여([JS] 실행 컨텍스트, Lexical Environment & 호이스팅), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wldns12378/JS-실행-컨텍스트-Lexical-Environment-호이스팅저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)