유효 범위 : 함수 스코프
값 재할당 : 가능
재선언 : 가능
var name = "MinSeop";
console.log(name);
var name = "Duck";
console.log(name);
//output: MinSeop
//output: Duck
var
를 사용하면 변수 선언의 경우, 할당되는 값이 유동적으로 변경될 수 있는 단점을 가지고있다.
ex ) 코드가 아주 길게 되었을때 선언한 변수를 까먹고 다시 선언했다면 var
는 재선언,재할당이 가능해서 문제를 일으킬 수 있다.
2015년 ES6 업데이트 이후로 추가된 변수 선언 방식인 let
과 const
는 var
와 같은 선언 방식을 막고있다.
유효 범위 : 블록 스코프 / 함수 스코프
값 재할당 : 가능
재선언 : 불가능
let name = "MinSeop";
console.log(name);
let name = "Duck";
console.log(name);
//output: Identifier 'name' has already been declared
let
을 사용했을 경우에는 name
이 이미 선언되었다는 에러 메시지가 나오는걸 볼 수 있다.
위에 코드에는 let
만 케이스로 집어넣었지만 const
도 마찬가지로 변수 재할당이 안된다는 특징을 가지고있다.
그럼 let
과 const
는 어떤 차이가 있을까?
let
과 const
의 차이점은 변수의 immutable (불변)
여부이다.
let
은 변수에 재할당이 가능하지만,
const
는 변수 재선언, 재할당 모두 불가능하다.
유효 범위 : 블록 스코프 / 함수 스코프
값 재할당 : 불가능
재선언 : 불가능
/////// let
let testCase = 'let'
// output: let
let testCase = 'let2'
// output: Uncaught SyntaxError: Identifier 'testCase' has already been declared
testCase = 'let3'
// output: let3
/////// const
const testCase = 'const'
// output: const
const testCase = 'const2'
// output: Uncaught SyntaxError: Identifier 'testCase' has already been declared
testCase = 'const3'
// output: Uncaught TypeError:Assignment to constant variable.
var
는 function scope
를 가지게되고
let, const
는 block scope
를 가지게된다.