var는 함수 범위이다. 같은 함수 내에서 쓰이면 블럭에 상관 없이 값을 재정의할 수 있다.
반면에 let과 const는 같은 블럭 내에서는 재정의가 불가능하다.
let과 const는 블럭 범위이다. 그리고 둘 다 선언하기 전에는 사용이 불가능하다.
let은 값의 재할당이 가능해서 값 할당 없이 선언만 하고 나중에 값을 할당할 수 있다.
반면 const는 재할당이 불가능하기 때문에 값 할당 없이 선언만 하면 오류가 난다.
let과 const 모두 다른 블럭에서라면 재선언이 가능하다. 왜냐하면 let과 const 모두 블럭 범위이기 때문에 블럭을 벗어나면, 즉 함수가 종료되면 생명이 끝난다. 예를 들어 A,B 함수가 있다면 A에서 let a, B에서 let a 선언이 가능하다. 마찬가지로 A에서 const a=1, B에서 const=2 가능하다.
console.log(v)
var v=1
//console.log(l)//선언 전에 사용 불가
let l//값 할당 없이 선언만 하고
l=2//값의 재할당 가능
console.log(l)
function le(){
let l=7//다른 블럭 영역에서는 재정의 가능
console.log('le invoked')
console.log(l)
}
le()
console.log(l)
/*
const c //값의 할당 없이 사용 불가
c=3
*/
const c=3 //초기화와 값 할당을 동시에 해야 함
console.log(c)
function co(){
const c=4//같은 영역에서 재정의 불가
console.log('c',c)
}
co()
function A(){
let a
a=1
const b=-1
console.log(a)
console.log(b)
}
function B(){
let a
a=3
const b=-5
console.log(a)
console.log(b)
}
A()
B()
'JS > ECMAscript' 카테고리의 다른 글
멀티라인 문자열 (0) | 2018.12.29 |
---|---|
화살표 함수 arrow function (0) | 2018.12.29 |
기본 인자 (0) | 2018.12.29 |
객체 리터럴 변경사항 (0) | 2018.12.29 |
나머지 연산자와 전개 연산자 (0) | 2018.12.29 |