Javascript - closure, scope

ryan·2022년 5월 1일
0

학습 자료 : [10분 테코톡] 🍧 엘라의 Scope & Closure

Scope

  • 변수 이름, 함수 이름 등의 식별자가 본인이 선언된 위치에 따라 다른 코드에서 참조될 수 있을지 없을지 결정되는 것.

Scope Chain

  • 변수는 선언 시점과 위치에 따라 전역변수, 지역변수인지 정의된다.
  • Scope는 함수의 중첩에 의해 계층적인 구조(지역 -> 전역)를 가지게 된다.
  • 이런 계층적인 연결 구조를 Scope Chain이라고 한다.
  • scope chain은 변수를 참조할 때 scope chain을 따라가면서 변수를 참조하게 된다.

스코프의 종류

  • 정적 스코프(렉시컬 스코프) : 함수가 정의되는 시점에 결정 (자바스크립트)
  • 동적 스코프 : 함수가 호출되는 시점에 결정

자바스크립트에서 함수는 정의되는 시점에 자신의 내부 슬롯에 상위 스코프에 대한 참조를 저장.

함수 호출 사이클 : 함수 호출 > 실행 컨텍스트 스택에 쌓임 > 렉시컬 환경 생성

Closure

  • 아래 이미지 참조. 중첩 함수에서 inner 함수가 자신의 내부 함수에 저장된 생명 주기를 마감한 함수 outer의 렉시컬 환경을 참조할 때 inner 함수를 closure라고 부른다.

  • inner함수의 객체를 기준으로 외부 함수(outer)는 생명주기를 마감하고 실행 컨텍스트에서 사라졌지만 여전히 상위 스코프의 의존하여 상위 스코프의 식별자를 참조할 수 있게됨.

Closure의 구분

  • 상위 스코프의 식별자를 참조
  • 본인의 외부 함수보다 더 오래 살아있는 경우
  • 함수 본인이 기억하고 있는 자유변수(생명주기를 마감한 함수의 지역 변수)에 갇혀있다는 의미
profile
프론트엔드 개발자

0개의 댓글