[자바스크립트] 변수의 생명 주기

박지원·2023년 3월 23일
0

1차 스터디

목록 보기
7/13

▷ 지역 변수 선언과정

#1

var tmp = 'global';     // 1, 3

var fin = function () { // 2, 4, 5
	var tmp = 'local';  // 7, 8
  
  	console.log(tmp);   // 9
  	//local
  
	return tmp;         // 10
}

fin();                  // 6

console.log(tmp)        // 11
// global

변수의 선언을 배우면서, 모든 선언문은 런타임 이전(코드 평가 기간)에 실행된다고 배웠다. 하지만 이것은 전역 변수에 한정된 것이기 때문에, 이제는 함수 내부 지역 변수의 선언 과정을 알아야 한다.

위의 코드에서 런타임 이전에 실행되는 선언문은 전역 tmpfin함수 이다. 그렇다면 지역 tmp선언문은 언제 실행되는지 알아보자.

<전역 코드 평가>
1. 전역 tmp 생성 + undefined로 초기화 ( 변수 호이스팅 )
2. 전역 fin 생성 + undefined로 초기화 ( var로 선언한 함수 표현식이라서 변수 호이스팅 발생 )

<전역 런타임>
3. 전역 tmp에 리터럴 'global'을 할당
4. fin의 함수 객체값 생성
5. fin에다가 함수 객체의 참조값을 할당
6. fin함수 호출

<fin 함수 내부 - 지역 코드 평가>
7. 지역 tmp 생성 + undefined로 초기화 ( 변수 호이스팅 )

  1. 지역 tmp에 리터럴 'local'을 할당
  2. 콘솔에 'local' 출력
  3. 지역 tmp 소멸
  4. 콘솔에 'global' 출력

6번에서 7번 사이가 함수 호출 직후이다.

함수 호출 직후에는 그 전부터 한줄 씩 코드가 실행되고 있었던 런타임을 잠시 멈추고, 함수 내부의 코드 평가 기간으로 잠시 들어가서 함수 내부의 선언문들을 실행한다. 그리고 나서 다시 전역 런타임인 8번으로 돌아온다.

본문에서는 이를 지역 코드 평가 기간이라고 부르지 않지만, 나는 이렇게 이해하는게 빨라서 그냥 코드 평가 기간이라고 부른다.

본문에는 '함수가 호출된 직후에 함수 몸체의 코드가 한 줄씩 실행되기 이전에 자바스크립트 엔진에 의해 먼저 실행된다' 라고 되어있다.

따라서 지역 변수 tmpfin함수가 호출되어야 생성이 되고, 함수가 호출되어 실행되는 동안에만 유효한 변수이다.

지역변수의 생명주기는 함수의 생명 주기와 일치한다

profile
NodeJS 백엔드

0개의 댓글