var
console.log(a);
a=4;
var a;
위 코드상에선 a가 선언되지도 않아 에러가 나야하지만
var를 이용하면 undefined 가 뜬다(변수는 선언됐단 뜻)
변수를 어디에 선언하든 상관없이 끌어올려 선언시키는 hoisting이라는 것 때문에
소스코드 첫 번째 줄에서도 a를 참조할 수 있다.
hoisting으로 인해 편하게 소스를 작성할 수 있어서 좋아보이지만
단점도 확실히 존재함
1. if문 내의 scope
var는 let, const와 달리 if문에서 소스 코드를 작성할 시 전역변수와 같은 scope를 지님
그래서 scope관리에 더 신경써야 한다.
2. hoisting
var는 let, const와 같이 hoisting이 되지만
let, const는 TDZ 존 단계를 지니며 hoisting이 되지 않은 것처럼 보여진다.
var는 완전하게 hoisting이 이루어져 소스코드의 어디서든 변수가 선언만 되어있다면 호출할 수 있다.
이로 인해 소스코드 작성에 있어 난이도는 쉬워진다는 장점이 있지만,
무분별한 작성으로 에러를 유발하기 쉽다.
TDZ
TDZ란 "일시적 사각지대 존" 라고 불리며
변수의 할당까지 (선언 > 초기화 > 할당) 단계가 있다면 선언과 초기화 단계 사이에 존재하여
초기화되지 않은 변수들을 가지고 있다.
즉 변수들의 초기화 상태 전, 사용을 막아준다.
'js > 작동방식' 카테고리의 다른 글
node 비동기 작업의 실행원리 (process.nextTick) (0) | 2024.12.05 |
---|---|
js 일급객체(함수) (0) | 2023.02.15 |
js 실행컨텍스트 (0) | 2022.12.28 |
js node, npm, cli (0) | 2022.01.15 |
댓글