1. var 변수는 함수 레벨 스코프에서 선언한 것을 제외하고 전역 변수가 됩니다. 다시 말해, if, for, while 같은 제어문 블록 내에서 var 변수를 선언한 것도 전역변수가 됩니다. 만일 블록 밖에서 i라는 var 변수를 선언한 적이 있다면, 블록 내에서 그 변수를 중복 선언해 값이 바뀔 수 있습니다. 2. 변수 선언 시 할당이 이뤄지는 런타임 이전에 선언 단계와 초기화 단계가 있습니다. var 변수는 선언 시 런타임 이전부터 이미 선언 단계와 초기화 단계를 거쳐 undefined이 됩니다. 그 변수에 값이 할당이 되는 것은 런타임 때 코드를 한 줄 한 줄 읽다가 할당문을 만나면 그때 값을 할당합니다. 만일, var x = 1; 이라는 문이 50번 째 줄에 있다고 하고, if(x)가 1번 째 줄에 있다고 한다면, 참조 오류가 아닌 x = undefined를 출력합니다. 이를 변수 호이스팅 이라고 합니다. let도 호이스팅이 일어나지만, var 변수와 주요한 차이는 선언 단계 이후에 undefine으로 초기화되지 않기 때문에 위와 같은 경우 참조 오류가 발생합니다. let을 포함한 ES6에서 추가된 키워드는 모두 선언 단계 이후에 TDZ에 들어가는데, TDZ에 들어가면 할당 이전에 참조가 금지됩니다. 이 내용이 더 궁금하시다면 실행 컨텍스트를 공부해보시면 됩니다.

다음 내용이 궁금하다면?

지금 간편 가입하고 다음 내용을 확인해 보세요!

또는

이미 회원이신가요?

2023년 1월 7일 오전 4:53

조회 100

댓글 0