본문 바로가기

JavaScript

[JavaScript] var과 let, const

var                                 

var은 ES6 이전의 변수 선언 방식으로, 함수단위의 스코프를 가지므로 매우 유연한 방식으로 변수를 선언할 수 있다.

 

var a = 'a'

function outter(){
	console.log(a)
	var a = 'b'
   
	function inner(){
		console.log(a)
      }
	inner()
	console.log(a)
}

outter()
consol.log(a)

위와 같은 코드에서, var 변수 a의 값은 아래와 같이 출력된다.

< 출력 >
undefined
b
b
a

자바스크립트는 변수의 선언을 위로 끌어올리는 호이스팅 특성을 가지기 때문에, 처음 출력문에서 a는 값이 정의되지 않는 상태가 된다. 또한 마지막 출력문에서 outter 함수에서 지정된 a의 값 b는 유효하지 않게 된다. 때문에 마지막 출력문에서 변수 a의 값은 a가 된다.

 

또한 var은 재선언이 가능하다.

var a = '1'
var a = '2'

때문에 위와 같은 코드도 오류없이 실행된다.

 

하지만 이런 유연한 변수의 선언은 편리하기도 하지만 많은 오류의 원인이 되기 때문에 ES6에서는 추가된 변수 선언 방법인 const와 let을 사용하는 것이 바람직하다.

 

 

 

let, const                                              

let과 const는 블록단위의 스코프를 가지며, 재선언이 불가능한 변수 선언 방법이다.

 

{
	let a = 'a'
}

console.log(a)

때문에 위와 같은 코드에서 블록 밖에서 선언된 변수 a가 존재하지 않으므로 오류가 발생하게 된다.

 

다만 let, const의 차이는 값의 재정의 허용여부이다.

let은 값을 재정의할 수 있지만, const는 값을 재정의할 수 없다.

let a = 'a'
a = 'b' // 에러 발생 x

const b = 'b'
b = 'c' // 에러 발생