💡2.3 변수 선언과 사용

값은 리터럴 값으로 표현하거나 변수에 담긴다. 변수는 값을 담는 상자라고 생각하자.

변수 선언(생성) → 변수 사용

식별자(identifier)라고도 불리는 변수는 다양한 문법으로 선언할 수 있고, 문법마다 작동 방식이 다르다.

var

var myName = "타로";
var age;
  1. var는 프로그램 내에서 사용할 수 있는 변수를 정의한다.

  2. 초깃값을 할당할 수 있는 변수를 선언한다.

let

let myName = "타로";
let age;

var과 let의 차이

  1. let으로 선언한 변수는 var로 선언한 변수보다 접근 범위가 한정된다.

  2. var: 함수 스코프 → 변수를 좀 더 넓은 범위에서 사용할 때

  3. let: 블록 (스코프) → 프로그램 내 변수의 영향 범위를 제한해 변수 이름의 중복 막기

var adult = true;

if (adult) {
    var myName = 'taro';
    let age = 25;
    console.log("it's secret!");
}

console.log(myName);
// taro
console.log(age);
// error
  • if 문 밖에서 var로 선언한 myName 접근 ⭕️

  • if 문 밖에서 let으로 선언한 age 접근 ❌ (유효범위가 블록이므로 if 문 밖에서 접근하면 오류 발생)

var 유효 범위에 대한 작동 방식은 혼란을 야기한다. var는 피하고 let이나 const를 사용하라고 제안하는 경우가 많지만, 필자는 필요한 기능이 있다면 자유자재로 사용하는 것을 권장한다.

const

let과 유사하지만, 선언 되는 순간에 값을 할당해야 하고 나중에 다른 값을 재할당할 수 없다.

const는 재할당이 불가능하지만, 값을 바꿀 수 없는 것은 아니다. 이런 관점에서 const를 사용해 객체를 정의하는 건 좋지 않은 방식이다. (재할당은 불가능하지만 값을 바꿀 수 있기 때문) const를 사용해 객체를 정의하는 것은 피하도록 하자.

const는 간단한 원싯값에 이름을 부여할 때 가장 적절하다. 원시 타입 변수를 만들면 가독성이 좋아진다. const를 원싯값을 저장하는 용도로만 사용하면 재할당과 값 변경 관련 혼란을 피할 수 있다.

변수 선언
var
let
const

접근 범위

함수 스코프

블록 (스코프)

블록

재할당

가능

가능

불가능

값 변경

가능

식별자 선언하기

식별자 hello의 유효 범위는 가장 바깥 스코프이고 함수를 참조한다. 반면 함수의 매개변수 myName은 함수 안에서 생성되므로 함수 스코프에서만 접근 가능하다. hellomyNamevar로 선언한 변수처럼 작동한다.

catch 절을 만들 때

catch 절에 전달하는 err의 스코프는 let으로 선언한 변수처럼 블록 스코프이다.

Last updated