Javascript

모던 자바스크립트 Deep Dive 읽기 - 15장 : let, const 키워드와 블록 레벨 스코프

띵킹 2022. 3. 17. 00:35

ES5까지 변수를 선언할 수 있는 유일한 방법은 var키워드를 사용하는 것이었다. var 키워드는 독특한 특징이 있어 심각한 문제를 발생시킬 수 있다

 

먼저 var 키워드는 같은 스코프 내에서 중복 선언을 허용한다. 만약 동일한 이름의 변수가 이미 선언되어 있는 걸 모르고 변수를 중복 선언하면서 값까지 할당한다면, 의도치 않게 먼저 선언된 변수 값이 변경되는 부작용이 발생한다. 

또한 var 키워드는 오로지 함수의 코드 블록만을 지역 스코프로 인정한다. 함수 외부에서 var 키워드로 선언한 변수는, 코드 블록 내에서 선언해도 모두 전역 변수가 된다. 이는 전역 변수를 남발할 가능성을 높이고 의도치 않게 전역 변수가 중복 선언되는 상황을 초래한다. 

이러한 var 키워드의 단점을 보안하기 위해 ES6에서는 새로운 변수 선언 키워드인 let과 const를 도입했다. 

 

먼저 let 키워드는 var 키워드와 달리 변수의 중복 선언이 금지되어 있으며, 함수 레벨 스코프와 더불어 블록 레벨 스코프도 따른다. var와 마찬가지로 변수 호이스팅이 일어나지만, 런타임에 초기화가 이루어지기 때문에 먼저 참조할 수 없다. 전역 변수나 함수로 var 키워드를 사용하면, 전역 객체인 window에 변수나 함수가 바인딩된다. 그러나 let 키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아니며, 보이지 않는 개념적인 블록 내에 존제하게 된다.

 

const 키워드는 상수를 선언하기 위해 사용한다. const 키워드의 특징은 let 키워드와 대부분 동일하나, let 키워드처럼 재할당이 불가능하다 

let 사람이름이 = '엄'
사람이름이 = '준식' // O

const 사람이름이 = '엄'
사람이름이 = '준식' // X

const 키워드로 선언된 변수는 재할당이 금지되며, 원시 값이 할당된 경우 원시 값은 불변성을 가지고 있어서 이를 변경할 방법이 없다. 이를 통해 상태 유지와 가독성, 유지보수의 편의가 증대된다.

그러나 const 키워드로 선언된 변수에 객체가 할당되는 경우, 값을 변경할 수 있다. 변경 불가능한 원시 값과 다르게 객체의 값은 변경 가능하기 때문이다. const 키워드는 재할당을 금지할 뿐이지 값이 변경 불가능한 것이 아니다.

 

변수 선언에는 기본적으로 const를 사용하고, 재할당이 필요한 경우에 한정해 let을 사용하는 것이 좋다. 또한 ES6를 사용한다면 var는 사용하지 않는 것이 좋다. 

728x90