2.3 변수 선언과 사용
값은 리터럴 값으로 표현하거나 변수에 담긴다. 변수는 값을 담는 상자라고 생각하자.
변수 선언(생성) → 변수 사용
식별자(identifier)라고도 불리는 변수는 다양한 문법으로 선언할 수 있고, 문법마다 작동 방식이 다르다.
var
var는 프로그램 내에서 사용할 수 있는 변수를 정의한다.
초깃값을 할당할 수 있는 변수를 선언한다.
let
var과 let의 차이
let으로 선언한 변수는 var로 선언한 변수보다 접근 범위가 한정된다.
var: 함수 스코프 → 변수를 좀 더 넓은 범위에서 사용할 때
let: 블록 (스코프) → 프로그램 내 변수의 영향 범위를 제한해 변수 이름의 중복 막기
if 문 밖에서 var로 선언한 myName 접근 ⭕️
if 문 밖에서 let으로 선언한 age 접근 ❌ (유효범위가 블록이므로 if 문 밖에서 접근하면 오류 발생)
var 유효 범위에 대한 작동 방식은 혼란을 야기한다. var는 피하고 let이나 const를 사용하라고 제안하는 경우가 많지만, 필자는 필요한 기능이 있다면 자유자재로 사용하는 것을 권장한다.
const
let과 유사하지만, 선언 되는 순간에 값을 할당해야 하고 나중에 다른 값을 재할당할 수 없다.
const는 재할당이 불가능하지만, 값을 바꿀 수 없는 것은 아니다. 이런 관점에서 const를 사용해 객체를 정의하는 건 좋지 않은 방식이다. (재할당은 불가능하지만 값을 바꿀 수 있기 때문) const를 사용해 객체를 정의하는 것은 피하도록 하자.
const는 간단한 원싯값에 이름을 부여할 때 가장 적절하다. 원시 타입 변수를 만들면 가독성이 좋아진다. const를 원싯값을 저장하는 용도로만 사용하면 재할당과 값 변경 관련 혼란을 피할 수 있다.
접근 범위
함수 스코프
블록 (스코프)
블록
재할당
가능
가능
불가능
값 변경
가능
식별자 선언하기
식별자 hello
의 유효 범위는 가장 바깥 스코프이고 함수를 참조한다. 반면 함수의 매개변수 myName
은 함수 안에서 생성되므로 함수 스코프에서만 접근 가능하다. hello
와 myName
은 var
로 선언한 변수처럼 작동한다.
catch 절을 만들 때
catch 절에 전달하는 err
의 스코프는 let
으로 선언한 변수처럼 블록 스코프이다.
Last updated