[JavaScript] var / let / const (중복선언, 재할당, 스코프)

2024. 2. 20. 18:00·Front end/JavaScript
반응형

자바스크립트에서 변수를 선언할때 사용하는 var, let, const는

어떤 차이점이 있을까요?


[1. 변수의 선언방식]

1.1. var 

var은 중복 선언과 변수의 재할당이 가능합니다.

 

변수를 유연하게 사용할 수 있다는 장점이 있지만

복잡한 코드에서 같은 이름의 변수가 여러번 사용되면 문제를 파악하기에 어려움이 있습니다.

var name = "메롱"
console.log(name) //메롱

var name = "안녕"
console.log(name) //안녕

name = "하이"
console.log(name) //하이

 

이러한 문제점을 보완하기 위해

ES6에서 등장한 변수의 선언방식이 let과 const 입니다.

1.2. let 

let은 중복 선언은 불가하고 변수의 재할당은 가능합니다.

let name = "딸기"
console.log(name) //딸기

let name = "초코"
console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared

name = "바나나"
console.log(name) //바나나

 

👇👇 크롬개발자도구에서 let 테스트하기

더보기

cf. 크롬개발자도구에서 let 테스트하기

let의 변수 재할당을 테스트하기 위해 크롬 개발자도구를 사용하였습니다.

 

그런데 let으로 재할당이되는 것을 확인했습니다.

이는 개발자도구와 같은 REPL(Read-Eval-Print-Loop)모드와 일반 스크립트의 차이 때문이라고 합니다.

 

 

개발자도구에서 let을 테스트하기 위해서는 아래와 같이 한번에 입력해야합니다.

1.3. const 

const는 중복 선언과 변수의 재할당 모두 불가능합니다.

const name = "딸기"
console.log(name) //딸기

const name = "초코"
console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared

name = "바나나"
console.log(name) //Uncaught SyntaxError: Identifier 'name' has already been declared

[2. 스코프]

2.1. 함수레벨 스코프 (function level scope) 

  • var이 해당함.
  • 함수 내부에서 선언한 변수 -> 지역 변수
  • 함수 외부에서 선언한 변수 -> 전역 변수

for문의 선언문에서 var 키워드로 선언한 변수 i는 for문의 외부에서 참조가 가능합니다.

var i = 10;

for (var i = 0; i < 3; i++){
    console.log(i) // 0 1 2
}

console.log(i); // 3

 

함수 내에 선언된 변수가 아닌 경우 전역 변수로 인식됩니다.

var value = "org" //전역변수
if(true){
    var value = "new" //전역변수
}
console.log(value) //new

 

2.2. 블록레벨 스코프 (block level scope) 

  • let, const가 해당함.
  • 모든 코드 블록 내에서 선언한 변수 -> 지역 변수
let cake = "초코" //전역변수
if(true){
    let cake = "딸기" //지역변수
    let cookie = "마시멜로"//지역변수
}
console.log(cake) //초코
console.log(cookie) //Uncaught ReferenceError: cookie is not defined

결론적으로, 재할당이 필요없는 상수에는 const

재할당이 필요한 경우 let을 사용하도록 합시다 ~!

반응형

'Front end > JavaScript' 카테고리의 다른 글

[JavaScript] JavaScript의 비동기 처리: Promise와 async/await 그리고 Java와의 차이점  (0) 2025.04.04
[JavaScript] Call by Value 와 Call by Reference  (0) 2025.04.02
[JavaScript] location.replace와 location.href의 차이점  (0) 2024.07.11
'Front end/JavaScript' 카테고리의 다른 글
  • [JavaScript] JavaScript의 비동기 처리: Promise와 async/await 그리고 Java와의 차이점
  • [JavaScript] Call by Value 와 Call by Reference
  • [JavaScript] location.replace와 location.href의 차이점
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (253)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (70)
        • Spring Project (27)
        • Java (21)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (23)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (9)
      • Database (16)
        • Oracle (10)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Oracle
    java
    1차원 배열
    solved.ac
    배열
    springboot
    github
    백준 자바
    알고리즘
    구현
    for문
    BOJ
    Git
    단계별풀기
    백준
    문자열
    백준알고리즘
    오라클
    spring
    jpa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[JavaScript] var / let / const (중복선언, 재할당, 스코프)
상단으로

티스토리툴바