JAVASCRIPT DEEP DIVE 2회독 14,15장 -전역 변수의 문제점, let,const 키워드와 블록 레벨 스코프

김명성·2022년 5월 24일
0

변수의 생명 주기

지역 변수는 함수가 호출되면 생성되고 함수가 종료하면 소멸된다.

지역 변수는 함수가 호출되기 이전까지는 생성되지 않는다.
함수를 호출하지 않으면 함수 내부의 변수 선언문이 실행되지 않기 때문이다.

지역 변수의 생명 주기는 함수의 생명 주기와 일치한다.
하지만 누군가가 메모리 공간을 참조하고 있으면 해제되지 않고 확보된 상태로 남아 있게 된다.

함수 레벨 스코프

var 키워드로 선언한 변수는 함수를 지역스코프로 인정한다.
if,for문 등 문(statement)에 포함된 var는 전역 변수이다.

변수 호이스팅

var 키워드로 선언한 변수는 변수 선언문 이전에 참조할 수 있으며 할당문 이전에 변수를 참조하면 언제나 undefined를 반환한다.

변수 선언문 이전에 변수를 참조하는 것은 변수 호이스팅에 의해 에러를 발생시키지는 않지만 프로그램의 흐름상 맞지 않을뿐더러 가독성을 떨어뜨리고 오류를 발생시킬 여지를 남긴다.

let,const로 선언한 변수를 변수 선언문 이전에 참조하면 참조 에러가 발생한다.
let 키워드로 선언한 변수는 '선언 단계'와 '초기화 단계'가 분리되어 진행된다. 즉 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 선언 단계가 실행되지만 초기화 단계는 변수 선언문에 도달했을 때 실행된다.
초기화 단계가 실행되기 이전에 변수에 접근하려고 하면 참조 에러가 발생한다. 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간을 일시적 사각지대라고 부른다.
다만 호이스팅이 발생하지 않는 것은 아니다.
자바스크립트는 모든 선언을 호이스팅한다.
단 let,const,class 선언문은 호이스팅이 발생하지 않는 것처럼 동작한다.

let 키워드

앞에서 살펴본 var 키워드의 단점을 보완하기 위해 ES6에서는 let,const를 도입했다.

블록레벨스코프

let,const 키워드로 선언한 변수는 코드 블록을 지역 스코프로 인정하는 블록 레벨 스코프를 따른다.

const 키워드

const 키워드는 반드시 선언과 동시에 초기화해야 한다.


if,for문 등 문(statement)에 포함된 var는 전역 변수이다.

let 키워드로 선언한 변수는 '선언 단계'와 '초기화 단계'가 분리되어 진행된다. 즉 런타임 이전에 자바스크립트 엔진에 의해 암묵적으로 선언 단계가 실행되지만 초기화 단계는 변수 선언문에 도달했을 때 실행된다.

초기화 단계가 실행되기 이전에 변수에 접근하려고 하면 참조 에러가 발생한다. 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간을 일시적 사각지대라고 부른다.

자바스크립트는 모든 선언을 호이스팅한다.
단 let,const,class 선언문은 호이스팅이 발생하지 않는 것처럼 동작한다.

const 키워드는 반드시 선언과 동시에 초기화해야 한다.

0개의 댓글