💡 1차로 코어자바스크립트 스터디를 하며 중요한 부분들 정리(21.11.28)
자바스크립트만의 특이한 현상들
어떤 실행컨텍스트가 활성화되는 시점에
실행할 코드에 제공할 환경 정보들을 모아 놓은 객체
환경 정보
들을 모아 컨텍스트를 구성(함수를 실행)하고,으로 전체 코드의 환경과 순서를 보장한다.
현재 컨텍스트 내의 식별자들에 대한 정보(environmentRecord)
외부 환경 정보(outer-EnvironmentReference)
선언 시점의 LexicalEnvironment의 스냅샷으로 변경 사항은 반영되지 않음.
즉, 최초 실행 시의 스냅샷을 유지
컨텍스트를 구성하는 환경 정보들을 사전에서 접하는 느낌으로 모아놓는다.
environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
을 순서대로 수집한다.
코드가 실행되기 전임에도 자바스크립트 엔진은 이미 해당 환경에 속한 코드의 변수명들을 모두 알고 있게 되는 셈이다.
이를 호이스팅(hoisting)이라고 한다.
함수 선언문
: function 정의부만 존재
함수 표현식(익명 함수 표현식)
: 정의한 function을 별도의 변수에 할당
스코프
: 식별자에 대한 유효범위이다.
(ES5까지 전역공간을 외하면 오직 함수에 의해서만 스코프가 생성되었다.)
스코프 체인
은 스코프를 안에서부터 바깥으로 차례로 검색해나가는 것인데,
이를 가능케 하는 것이 outerEnvironmentReference 이다.
💡 추가적인 설명 필요
outerEnvironmentReference는 현재 호출된 함수가 선언될 당시의 LexicalEnvironment를 참조한다.
(선언될 당시는 은 콜 스택 상에서 어떤 실행 컨텍스트가 활성화된 상태일 때 뿐이다)
여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에만 접근 가능하다.
실행 컨텍스트의 thisBinding에는 this로 지정된 객체가 저장된다.
실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장된다.
(다음 장에서 자세히 설명)
프리온보딩을 하면서 같은 팀원들 중에 몇명이 모여 실행 컨텍스트를 주말에 다 같이 한번 공부한 적이 있어서 생각보다 쉬운 파트였다. 사실 그때는 자바스크립트의 ㅈㅂ정도 알때라 너무 모르고 있는 나 자신이 부끄럽고, 이해하기도 어려워서 '참여'라는 자체가 스트레스였어서 엄청 고민하다가 '그냥 해보자! 모른다고 말하는 것도 용기다'는 생각으로 했었다. 사실 같이 공부라기 보단 두 분이서 나를 공부시켜주는 분위기였는데(아직도 감사하다🙏) 설명을 너무 잘해주시고 이해할때까지 알려주시고 보답이라기엔 뭐하지만 그 자리에서 이해하려고 엄청 애썼다. 그땐 스스로 너무 힘들었지만 지금 와서보니 한번 이해를 잘 해두니 이번엔 좀 더 보충, 복습하는 느낌으로 할 수 있었던 것 같다.
취업준비를 하면서 함께하는것의 의미를 몸소 깨닫게 됐다. 만약 내가 부끄러워서 팀원들과 공부를 하지 않았다면, 스터디를 참여하지 않았다면 나는 실행컨텍스트가 이런거구나~까지만 공부하고 넘어가고 다음에 또 이 개념이 나온다면 다시 처음부터 공부 해야했을 것이다.