카테고리 없음

[javascript] var VS let VS const

mimi04 2023. 7. 28. 16:43

수업을 들으면서 가장 이해가 안 가는 부분이라 개념을 확실하게 잡고자 유튜브 '생활코딩'을 참조해서 공부했더니 정리가 잘 되었다.

-----------------------------------------------------------------------------------------------------

예전: var

최신: let, const

var 보다 let, const 쓰는걸 권유

let- 값이 바뀔 수 있는 변수/ const- 값이 바뀔 수 없는 변수(상수)

 

****호이스팅(hoisting)**: 자바스크립트에서 함수가 실행되기 전에 안에있는 변수들을 범위의 최상단으로 끌어올려서 읽는것. → 호이스팅시 변수의 선언과 초기화( undefined) 같이 시켜버림.

따라서 변수에 값이 할당되기 전에 선언되면→ error가 발생하지 않고 undefined 가 발생됨.

변수에 값 할당은 차례가 되면 그 줄에서 할당을 함.

 

 

*let과 var의 차이

→ ‘global scope’ 와 ‘script scope’ !

var : global scope에 저장

let, const: global scope (x), script scope에 저장 → global scope는 너무 광범위하고 처리하는 일들이 많으므로 global scope에 보관하여 빌트인과 충돌하는 것을 방지하기 위함?

var : 블록 안에서 선언하면 블록 밖에서 선언한 것과 같음.

let : 블록 안에서만 선언.

→ var는 함수 안에 있을 때 로컬(local)이 된다.

→ let은 함수 안에 있을 때 로컬이 되는 것 + 블록 안에 있을 때 블록 scope을 갖게 된다. (블록 안: 조건문, 반복문 등)

 

→ 즉, var 함수 안에서만 지역변수로 호이스팅이 되고, 나머지 (for문, if문 등 블록) 안에서 선언되면 모두 전역변수로 호이스팅되기 때문에! for문, if 문 등에서 var이 선언된 것이 구문 밖에서도 에러 없이 선언되게 된다. → 따라서! 혼란을 일으킬 수 있기 때문에 쓰지 않는 것을 권유.

 

 

*재선언

let a = 1;

a = 2;

let a = 3; → 에러 발생(전에 한 번 선언된 적이 있다고 함. 실수 방지)

var b = 1;

bar b = 2; → 문제없이 작용(엄격하지 못함. 실수 발생 가능.)

 

결론, var보다 그냥 let, const를 쓰도록 하는게 오류 없애는 데 좋음! 

반응형