JavaScript에서의 생명주기 + 함수 선언문과 함수 표현식

김현중·2025년 3월 15일

연구소

목록 보기
29/34

Javascript에서 변수와 함수의 생명주기는 실행 컨텍스트와 렉시컬 환경에 의해 관리됩니다.

변수의 생명 주기:

1. 선언 단계

변수가 실행 컨텍스트의 렉시컬 환경에 등록. 이 단계는 코드 실행 전 엔진의 준비 과정에서 발생

2. 초기화 단계

변수에 메모리가 할당됨. var로 선연된 변수는 자동으로 undefined로 초기화되지만, letconst는 이 단계가 선언과 분리되어 TDZ가 발생합니다.

3. 할당 단계

변수에 실제 값 할당

4. 소멸 단계

변수가 접근 불가능해지고 가비지 컬렉션의 대상이 됨



var로 선언된 변수는 함수 스코프를 가지며 호이스팅 시 초기화까지 자동으로 이루어집니다. 그러나 letconst는 블록 스코프를 가지며 선언 위치까지 접근이 제한됩니다.

함수 선언문의 경우 완전히 호이스팅되어 선언 전에도 호출 가능하지만, 함수 표현식은 변수의 생명주기를 따릅니다.

실행 컨텍스트가 콜 스택에서 제거되면 해당 컨텍스트의 변수들은 접근 불가능해지지만, 클로저가 형성된 경우 외부 함수의 변수들은 내부 함수가 존재하는 한 계속 유지됩니다.



함수 선언문과 함수 표현식

함수 선언문과 함수 표현식은 js에서 함수를 정의하는 두 가지 주요 방식입니다.

함수 선언문

function sayHello(){
  return '안녕하세요';
}
  • 호이스팅이 완전히 이루어져 코드의 어느 위치에서든 호출 가능
  • 함수 전체가 메모리에 올라가므로 선언 전에도 사용할 수 있음
  • 항상 이름이 필요함
  • 주로 코드 최상위 레벨이나 다른 함수 내부의 최상위 레벨에서 사용됨


함수 표현식

const sayHello = function(){
  return '안녕하세요';
};

// 화살표 함수도 함수 표현식
const sayHi = () => '안녕';
  • 변수에 할당되는 형태로 정의
  • 변수 호이스팅 규칙을 따름
  • 함수 이름은 선택사항
  • 표현식으로 취급되어 다른 함수의 인자로 전달하거나 즉시 실행할 수 있음
  • 클로저를 생성하거나 콜백 함수로 많이 사용됨
profile
박수 받는 사람이 되고 싶어서 항상 노력합니다.

0개의 댓글