모던 자바스크립트 Deep Dive Ch24.

Jayde·2023년 3월 1일
0

2023-1 studyJs

목록 보기
7/7

Ch24. 클로저

: 이미 생명 주기가 종료한 외부 함수의 변수를 참조할 수 있고 외부 함수보다 더 오래 유지되고 있는 중첩 함수

  • 렉시컬 스코프
    : 함수를 어디에 정의했는지에 따라 상위 스코프 결정

  • 함수 객체의 내부 슬롯 [[Environment]]
    자신의 내부 슬롯 [[Environment]]에 상위 스코프의 참조를 저장(자신을 정의한 위치 기억)
    외부 렉시컬 환경에 대한 참조에는 함수 객체 내부 슬롯 [[Environment]]에 저장된 렉시컬 환경의 참조가 할당됨

  • 클로저와 렉시컬 환경
    외부 함수의 실행 컨텍스트는 실행 컨텍스트 스택에서 제거되어도 그 렉시컬 환경까지 소멸하지는 않음(누군가가 참조하고 있어 가비지 컬렉션 대상이 아님)

  • 클로저의 활용
    상태가 의도치 않게 변경되지 않도록 안전하게 은닉하고 특정 함수에게만 상태 변경을 허용하기 위해 사용

//카운트 상태 변경 함수
const increase = (function () {
  //카운트 상태 변수
  let num = 0;     //은닉된 private 변수
  //클로저
  return function(){ //즉시 실행 함수는 한번만 도니까 num 초기화 x
    return ++num;
  };
}());
  • 캡슐화와 정보 은닉
    캡슐화 : 프로퍼티와 메서드를 하나로 묶는 것
const Person = (function () {
  let _age = 0; //private
  
  function Person(name, age) {
  	this.name = name; //public
  	_age = age; 
  }

  Person.prototype.sayHi = function () {
  	console.log(`Hi! My name is ${this.name}. I am ${_age}`);
  };
  
  return Person;
}());
profile
가장 높이 빛난 별 잡아보일게

0개의 댓글