갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • 상속
  • 실행 컨텍스트
  • SPREAD
  • class
  • ECMAScript
  • PM2
  • 컴파일러
  • prototype
  • 싱글스레드
  • 함수
  • 호이스팅
  • 프로토타입
  • Arrow
  • 네이밍
  • function
  • this
  • nodemon
  • 인터프리터
  • 정적 레벨
  • 자바스크립트엔진
  • 스코프 체인
  • 렉시컬 환경
  • 원시타입
  • 심볼
  • symbol
  • 객체타입
  • 오버라이딩
  • structure
  • 이터러블
  • Babel

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript

[JavaScript_study] 렉시컬 환경(Lexical Environment)

2022. 4. 14. 02:58

* 실행 컨텍스트(Execution Context)

  • 코드의 실행 순서와 스코프를 기억
  • 자바스크립트 런타임안에 Call Stack이 있는데 Call Stack를 통해서 하나하나씩 코드의 실행순서를 기억한다.
  • 자바스크립트는 단 하나의 싱글 컨텍스트 스택이 있다.
    • 한번에 하나의 일만 처리 할 수 있다.


* 어떻게 블럭안에 데이터가 있는지 없는지 확인하고 그리고 근접한 부모의 스코프를 찾는걸까???

  • 이유는 각각의 블록은 렉시컬 환경(Lexical Environtment)라는 내부 오브젝트를 가지고 있다.
  • 그래서 각각 블럭 마다 어떤 변수들이 들어있는지 부모는 누구인지에 대한 정보를 가지고있는 오브젝트가 있다.
  • 실행순서와 각각의 블럭에 대한 정보들을 한 오브젝트안에 데이터를 담아둔다.

* 렉시컬 환경 내부

  • 환경 레코드(Environment Record) : 현재 블럭의 해당하는 정보를 담고있는 환경 레코드
  • 외부 환경 참조(Outer Lexical Environment Reference) : 부모는 누구인지 부모를 참조하고 있는 외부 환경 참조

* 실행 컨텍스트 스택

  • 코드가 실행이 되면 전역스코프 렉시컬 환경이 만들어진다. // 외부 렉시컬 환경 참조 : null
  • 이후 블럭1 렉시컬 환경이 만들어진다. // 외부 렉시컬 환경 참조 : 전역 렉시컬 환경(부모)
  • 이렇게 스코프들이 연결되어 있는것을 스코프 체인이라고 한다.
  • 블럭이 모두 끝나게 되면 하나하나씩 스택에서 빠지고 전역이 다 끝나야 스택이 텅텅비어진다.
  • 메모리 절약 뿐만 아니라, 성능을 위해서라도 변수는 최대한 필요한 곳에서 정의해야 한다.
    • 중첩된 스코프나 중첩된 함수가 있다면 스코프 체인을 따라서 계속 확인을 하기 때문에 성능이 저하된다.


* 스코프란?

  • 식별자가 유효한 범위
  • 스코프 외부에서는 스코프 내부에 있는거에 대해서 접근할 수 없지만 스코프 내부에서는 외부에 있는 그 어떤 부모의 데이터도 접근할 수 있다.
  • 이렇게 접근할 수 있는 이유는 각각의 스코프는 렉시컬 환경이란것이 있는데 그안에 외부 렉시컬 환경 참조를 통해서 스코프 체인을 통해서 찾아가면서 부모의 데이터에 접근할 수 있기 때문이다.

 


* 실행 컨텍스트(Execution Context)예시코드

  • 코드의 실행 순서와 스코프를 기억!
  • 각각의 블럭은 렉시컬 환경(Lexical Environtment)을 가지고 있다.
  • 렉시컬 환경(Lexical Environtment)내부에는 1. 환경 레코드(Environment Record) 2. 외부 환경 참조(Outer Lexical Environment Reference)이 있다.
// 전역스코프
const a = 1; 
{
  // 블럭1스코프
  const a = 2;
  {
    // 블럭2스코프
    const a =3;
  }
}

'Study > JavaScript' 카테고리의 다른 글

[JavaScript_study] var을 쓰지 말자  (0) 2022.04.14
[JavaScript_study] 호이스팅 (Hoisting)  (0) 2022.04.14
[JavaScript_study] 가비지 컬렉션 (garbage collection)  (0) 2022.04.14
[JavaScript_study] 스코프(Scope)  (0) 2022.04.14
[JavaScript_study] fetch api  (0) 2022.04.13
    'Study/JavaScript' 카테고리의 다른 글
    • [JavaScript_study] var을 쓰지 말자
    • [JavaScript_study] 호이스팅 (Hoisting)
    • [JavaScript_study] 가비지 컬렉션 (garbage collection)
    • [JavaScript_study] 스코프(Scope)
    갈푸라떼
    갈푸라떼

    티스토리툴바