관리 메뉴

효습

2.실행 컨텍스트 본문

스터디/Javascript

2.실행 컨텍스트

효효효효 2022. 11. 22. 16:37

실행 컨택스트 : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체

  1. 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고.,
  2. 이를 콜 스택(call stack)에 쌓아올렸다가,
  3. 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장합니다.

‘동일한 환경’ ,하나의 실행 컨텍스트를 구성할 수 있는 방법

  1. 전역공간
  2. eval()함수
  3. 함수(가장 흔하게 사용)
  • 스택 구조를 잘 생각해보면 한 실행 컨텍스트가 콜 스택의 맨 위에 쌓이는 순간이 곧 현재 실행할 코드에 관여하게 되는 시점

  • 어떤 실행 컨텍스트가 활성화될 때 자바스크립트 엔진은 해당 컨텍스트에 관련된 코드들을 실행하는 데 필요한 환경 정보들을 수집해서 실행 컨텍스트 객체에 저장 ( 이 객체는 자바스크립트 엔진이 활용할 목표로 생성할 뿐 개발자는 볼 수 없음)

    • VariableEnvironment :현재 컨텍스트 내의 식별자들에 대한 정보+ 욉 환경 정보 , 선언 시점은 LexicalEnvironment의 스냅샷으로, 변경사항이 반영되지 않음

    • LexicalEnvironment: 처음에는 VariableEnvironment와 같지만 변경 사항이 실시간 반영됨

    • ThisBinding: this식별자가 바라봐야할 대상 객체

      VariableEnvironment

    • LexicalEnvironment와 같지만 최초 실행 시의 스냅샷을 유지함

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

      LexicalEnvironment

    • 컨텍스를 구성하는 환경 정보들을 사전에서 접하는 느낌으로 모아놓은 것

    • environmentRecord와 호이스팅*

    • 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됨

    • 컨텍스트 내부 전체를 처음부터 끝까지 순서대로 수집함

    • 현재 실행될 컨텍스트의 대상 코드 내에 어떤 식뱔자들이 있는지에만 관심이 있고, 각 식별자에 어떤 값이 할당될 것인지는 관심이 없음 따라서 변수를 호이스팅할 때 변수명만 끌어올리고 할당 과정은 원래 자이레 그대로 남겨둠

    • 변수를 선언부와 할당부로 나누어 선언부만 끌어올리는 반명 함수 선언은 함수 전체를 끌어올림

      함수 선언문과 함수 표현식

    • 함수 선언문 : function 정의부만 존재하고 별도의 할당 명령이 없음 , 함수명을 반드시 정의

      • 전체 호이스팅
    • 함수 표현식 : 정의한 function을 별도의 변수에 할당함 , 함수명이 없어도 됨

      • 기명 함수 표현식은 외부에서 함수명으로 함수를 호출할 수 없음

      • 변수 선언부만 호이스팅

        function sum(a,b){   //함수 선언문 sum
               return a+b
        }
        
        var multiply = function(a,b){   //함수 표현식 multiply
          return a * b;
        }
        
- 동일한 변수명에 서로 다른 값을 할당할 경우 나중에 할당한 값이 먼저 할당한 값을 덮어씌움(override) , 코드를 실행하는 중에 실제로 호출되는 함수는 오직 마지막에 선언된 함수뿐
- 원활한 폅업을 위해서 전역공간에 함수를 선언하거나 동명의 함수를 중복 선언하는 경우는 없어야함
- 만에 하나 전역공간에 동명의 함수가 여럿 존재하는 상황이어도 모든 함수가 함수 표현식으로 정의돼 있었다면 괜찮다.

스코프, 스코프 체인

  • 스코프(scope) : 식별자에 대한 유효범위
  • 스코프 체인(scope chain) : 식별자의 유효범위를 안에서부터 바깥까지 검색해나감
  • outerEnvironmentReference : 선언 시점의 LexicalEnvironment를 계속 찾아 올라가면 마지막엔 전역 컨텍스트의 LexicalEnvironment가 있을 것임
    • 오직 자신이 선언된 시점의 LexicalEnvironment만 참조하고 있어서 가장 가까운 요소로부터 차례대로 접근할 수 있고 다른 순서로 접근하는 것은 불가능
    • 이러한 특성때문에 여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에 가장 먼저 발견된 식별자에만 접근 가능함

this

  • 실행 컨텍스테의 thisBinding에는 this로 지정된 객체가 저장됨
  • 실행 컨텍스트 활성화 당시에 this가 지정되지 않은 경우 this에는 전역 객체가 저장됩니다.

'스터디 > Javascript' 카테고리의 다른 글

3.this  (5) 2022.11.22
1.데이터 타입  (0) 2022.11.18