(Javascript) var, let, const

var 변수


기존의 var 변수는 전역변수를 선언할때, 변수의 유효범위가 어디인지, 호이스팅이 일어나는지에 따라 부수 효과가 일어나기 쉽다는 단점이 존재한다.

var변수의 이러한 단점을 보완하고자 ES6에서 새로이 let, const 개념을 도입했다.

#####

let 변수


let 변수는 var변수의 스코프 범위, 호이스팅 문제를 해결하기 위해 도입되었다. 다음과 같은 특징을 가진다.

  • 함수 안에 작성한 let변수는 함수가 스코프이다.
  • 함수 내에 if(a == b) {let sports = “축구”} 형태로 코드를 작성했을 때, sport변수의 스코프는 함수가 아닌 if문의 블록 {} 이다.
  • 블록 {} 밖에 같은 이름의 변수가 있어도 스코프가 다르므로 각각의 변수에 다른 값을 할당할 수 있다.
  • 블록 내의 블록이 작성되면 각각의 블록이 스코프이다.
  • 같은 스코프에서 같은 이름의 let변수를 선언할 수 없다.
  • 호이스팅이 되지 않는다.
사용 방법
// ex1 선언만 이루어짐
let grade

// ex2 하나의 변수 선언, 초기화
let name = "Jae"

// ex3 여러개의 변수 선언, 초기화
let score1 = 20, score2 = 30, score3 = 15

위 예제와 같이 선언할 수 있다.

다음과 같은 선언은 불가하다.

let name = "Jae"

let name = "Son"

// 같은 스코프에서 같은 이름의 let변수 선언 불가
let month = 8, let day = 6

// 콤마로 구분해 여러 변수 선언시 변수마다 let 사용 불가. 
// 아래와 같이 선언해야 함

let month = 8, day = 6
let grade = 5, var room = 3

// 콤마로 구분해 선언시 let변수와 var변수 동시에 선언 불가
예시코드
  • 블록 { } 스코프
let name = "Son"  // 이 변수의 스코프는 전역
if (name) {
  let name = "Lee" // 이 변수의 스코프는 블록
  console.log("블록: ", name)
}
console.log("전역: ", name)

/*
블록: Lee
전역: Son
*/
  • 힘수 스코프
let name = "Son"  // 이 변수의 스코프는 전역
function get() {
  let name = "Lee"  // 이 변수의 스코프는 함수
  console.log("함수 :", name)
}
get()
console.log("전역: ", name)

/*
함수: Lee
전역: Son
*/

const 변수


const 변수는 값을 변경할 수 없다.

사용 방법
const score1 = 10, score2 = 20, score3 = 15
예시코드
const name = "Son"

try {
  name = "Lee"
} catch (e) {
  console.log("const값 변경불가")
}

// const값 변경불가