두 개념을 암기하는 것은 의미가 없다
스코프와 실행 컨택스트의 관계를 생각하면서 코드를 읽어보자
🎬 #1
태초에 전역 스코프가 있었다.
그냥 광할한 우주와 같은 빈공간이다.
그곳에서 어느 순간 짠하고 빅뱅처럼 전역 컨텍스트가 생성된다.
그렇게 생겨난 전역 컨텍스트는 호이스팅과 this 바인딩을 처리한다.
(전역 실행 컨텍스트 생성[ GLOBAL ] )
🎬 #2
전역 실행컨텍스트 생성.
실행 컨택스트가 생성될 때, this 바인딩과 호이스팅이 이뤄진다.
❗ 그러므로 호이스팅이 이뤄져 변수와 함수가 선언된다.
스코프는 정의될 때 결정된다.
❗ 그러므로 함수의 스코프도 결정된다. [ GLOBAL > outer ]
호이스팅 끝나고 위에서 부터 차례대로 읽어나간다
🔄 같은 원리로 코드가 실행된다.
✔✔ inner 함수를 호출하면 inner 실행 컨텍스트가 생성된다.
실행컨텍스트로 호이스팅이 되어 변수 a가 선언된다.
이때의 변수 a의 값은 undefined이다.
이후 차례대로 로직을 진행하여 console.log(a)가 실행되어,
undefined가 출력되고, 그 후 변수 a에 3이 할당 된다.