코드로보시죠
[JavaScript-04] var를 쓰지 않는 이유와 호이스팅 본문
지난 강의에서, 변수를 선언할 때 var키워드는 잘 쓰지 않는다고 했는데요,
오늘은 그 이유에 대해 알아보려 합니다.
이유는 크게 두 가지 인데요,
(1) 호이스팅 문제
(2) 함수스코프를 갖는 문제
어려우신 분들은 이번 챕터는 넘어가셔도 좋습니다.
함수 내용을 공부하고 오셔도 좋아요.
(1) 호이스팅 문제
console.log(a);
let a = 5;
자, 이런 코드가 있다고 해볼게요.
우리 기본적으로,
변수나 함수는, 사용하기 이전에 선언이 되어 있어야 한다는 규칙이 있어요.
그런데, var키워드로 변수를 선언하면,
프로그램 내부적으로 a라는 변수를 선언한 부분을 출력문 위로 끌고 와요.
이걸 호이스팅이라고 해요.(코드 순서를 프로그램이 마음대로 변경해서 실행하는 것)
(실제로 코드가 변하진 않고 내부 로직만)
그래서 위의 코드를 실행하면, 출력문 이전에 변수 선언이 되지도 않았는데,
이렇게 undefined가 출력됩니다.
물론, 내부 값이 출력된 건 아니지만, 에러가 나지 않고 정상 동작하는게 진짜 무서운겁니다.
그러면, 나중에 개발하거나 유지보수 할 때 오류찾기 겁나 힘들어요....
(2) 함수 스코프의 문제
함수 스코프란, 함수 내에서 선언된 경우만 지역변수가 되고,
그 외는 어디서 선언하든 전역변수가 된다는 거죠.
let, const는 블록 스코프를 가지기 때문에, var보다 더 많은 경우에서 지역변수로 걸리게 됩니다.
제어문 전체에 해당하겠죠?
그래서, 동일 변수로 값을 바꿔버리는 실수를 할 확률이 적어요.
앞으로 우리는, let과 const를 즐겨 쓰도록 해요!
'[JavaScript] 코드잇과 함께!' 카테고리의 다른 글
[JavaScript-06] return이 있는 함수와 없는 함수 차이점 (0) | 2023.09.24 |
---|---|
[JavaScript-05] 함수 만들기 생기초편 (0) | 2023.09.24 |
[JavaScript-03]변수와 data타입의 모든 것 (0) | 2023.09.24 |
[JavaScript-02] 주석(comment)의 모든 것 (0) | 2023.09.24 |
[JavaScript-01] 세미콜론 in 자바스크립트 (0) | 2023.09.24 |