코어 자바스크립트 스터디 2주차 - 실행 컨텍스트

Genie·2021년 11월 25일
2

자바스크립트

목록 보기
2/4

회고
이번 장은 설명이 잘 되어 있어서 이해하기 쉬웠고, 식별자, 매개 변수 등 1장을 제대로 공부해둬서 다행이란 생각이 든다.

실행 컨텍스트


  • 실행할 코드에 제공할 환경 정보들을 모아놓은 객체
  • 전역 컨텍스트 , eval , 함수 실행에 의한 컨텍스트 등이 있다.
  • 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장한다.
  • 실행 컨텍스트를 구성하는 방법 : 함수를 실행하는 것
  • 실핸 컨텍스트가 콜 스택의 맨 위에 쌓이는 순간이 곧 현재 실행할 코드에 관여하게 되는 시점







실행 컨텍스트에 담기는(실행 컨텍스트가 수집하는) 정보들


  • VariableEnvironment : 현재 컨텍스트 내의 식별자들에 대한 정보 , 외부 환경 정보, 선언 시점의 LexicalEnvironment 의 스냅샷으로, 변경 사항은 반영 되지 않는다.
  • LexicalEnvironment : 처음에는 VariableEnvironment 와 같지만 변경 사항이 실시간으로 반영된다.
  • ThisBinding : This 식별자가 바라봐야 할 대상 객체

1) VariableEnvironment


  • 실행 컨텍스트를 생성할 때 VariableEnvironment 에 정보를 먼저 담은 다음, 이를 그대로 복사해서 LexicalEnvironment 를 만들고 이후에는 LexicalEnvironment 를 주로 활용하게 된다.

2) LexicalEnvironment


  • "현재 컨텍스트 내부에는 a,b,c와 같은 식별자들이 있고, 그 외부 정보는 D 를 참조하도록 구성돼있다." 라는, 컨텍스트를 구성하는 환경 정보들을 사전에서 접하는 느낌으로 모아놓은 것이다.





environmentRecord 와 호이스팅


  • 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
  • 매개변수 식별자(이름), 함수 자체, var 로 선언된 변수의 식별자 등
  • 컨텍스트 내부 전체를 처음부터 끝까지 쭉 훑어나가며 순서대로 수집한다.

참고

  • 전역 실행 컨텍스트는 호스트 객체로 분류된다.
  • 의미 : 자바스크립트 구동 환경이 별도로 제공하는 객체, 즉, 전역 객체를 활용한다.



호이스팅


  • '자바스크립트 엔진은 이미 해당 환경에 속한 코드의 변수명들을 모두 알고 있다.'
  • 변수 정보를 수집하는 과정을 더욱 이해하기 쉬운 방법으로 대체한 가상의 개념

호이스팅 규칙


  • 변수를 호이스팅 할 때 : 변수명만 끌어올리고, 할당 과정은 원래 자리에 그대로 남겨둔다.
  • 함수 선언 : 함수 전체를 끌어 올린다.
    • 호이스팅이 끝난 상태에서의 함수 선언문은 함수명으로 선언한 변수에 함수를 할당한 것처럼 여길 수 있다.





함수 선언문과 함수 표현식


  • 함수 선언문은 fucntion 정의부만 존재하고, 별도의 할당 명령이 없는 것, 반드시 함수명이 정의 되어 있어야 한다.
  • 함수 표현식은 정의한 function 을 별도의 변수에 할당하는 것, 함수명이 없어도 된다.

  • 기명 함수 표현식은 함수 내부에서 재귀함수를 호출하는 용도로 쓸 수 있다.
  • 원활한 협업을 위해서는 전역 공간에 함수를 선언하는 경우는 없어야 한다.
  • 모든 함수를 되도록이면 함수 표현식으로 정의하자.

중요한 차이점

  • 함수 선언문은 전체를 호이스팅 한다.
  • 함수 표현식은 변수 선언부만 호이스팅 한다.







스코프, 스코프 체인, outerEnvironmentReference


스코프

식별자에 대한 유효범위를 의미한다.


스코프 체인

식별자의 유효범위를 안에서부터 바깥으로 차례로 검색해나가는 것을 의미한다.


outerEnvironmentReference

현재 호출된 함수가 선언될 당시 의 LexicalEnvironment 를 참조한다.
연결 리스트형태를 띄며, 점점 범위를 확장해나가면서 탐색을 한다.
여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에서 가장 먼저 발견된 식별자에만 접근 가능하게 된다. ( 가장 먼저 : 가장 가까운 안쪽 또는 바깥쪽 스코프 )

변수 은닉화

스코프 체인 상에 있는 변수라고 해서, 무조건 접근 가능한 것은 아니다.(은닉)
inner 함수 내부에서 a 변수를 선언하면, 전역 공간에 선언한 a 에는 접근할 수 없다.
이를, 변수 은닉화 라고 한다.


전역 변수와 지역 변수

  • 전역 공간에서 선언한 변수는 전역 변수
  • 지역 공간 함수 내부에서 선언한 변수는 무조건 지역 변수
  • 코드의 안정성을 위해 가급적 전역변수 사용을 최소화하고자 노력하는 것이 좋다.
profile
차근차근

0개의 댓글