Hoisting and Closer


JavaScript 실행 단계

  1. 컴파일: 변수, 함수 선언을 코드가 실행되기 전에 메모리에 등록
  2. 실행: 코드가 순차적으로 실행되며 실제로 변수, 함수를 사용

Hoisting (호이스팅)

  • Hoist:끌어올리다.
  • 코드가 실행 되기 전, 필요한 메모리 공간을 확보하여 예기치 못한 오류를 막기 위해 실행.

변수

  • scope단위로 변수, 함수의 선언과 할당이 분리되어 식별자가 우선 선언된 것 같은 현상.
  • 왜냐하면… Javscript 엔진 구동시 선언이 최우선으로 해석되기 때문이다. 할당은 실제 코드 실행 시 동작함.
  • var: 변수 객체 등록 후 메모리 할당(undifined로 초기화)까지 호이스팅 됨. 즉, 초기화나 할당 전에도 이미 undifined로 초기화 되어 메모리가 할당되어있기에 접근 가능.
  • let, const: 변수 객체 등록 까지만 진행됨. 따라서 선언 지점 전에 참조하면 오류 발생.
    • TDZ(Temporal Dead Zone): 스코프 시작 지점부터 초기화 지점까지의 구간

함수

  • 함수 선언식: 함수 식까지 호이스팅 됨
funciton example(){ 
	console.log('함수 선언식' )
	}
  • 함수 표현식: var example 변수는 호이스팅 되지만 함수는 할당되기 전까지 참조 불가.
var example= function() {
	console.log('함수 표현식');
}

Closure(클로저)

  • 함수가 함수를 반환할 때, 그 반환되는 함수가 자신을 둘러싼 메모리 환경도 가지고 반환하는 것. 따라서 함수가 스코프 밖에서 실행될 때에도 접근 가능하다.
  • 전역 변수의 남용을 막고 캡슐화, 은닉화를 자바스크립트로 구현하기 위해 존재함.