Skip to main content

Command Palette

Search for a command to run...

var, let, const 그리고 호이스팅

Updated
1 min readView as Markdown
console.log(a)

var a = 'apple'

위 코드를 실행하면 undefined라는 결과가 출력된다. 어떻게 된 일일까?

자바스크립트 엔진은 변수 선언이 코드의 어디에 있던 상관 없이 다른 코드보다 먼저 실행된다. 코드를 위에서 아래로 쭉 실행하기 전, 변수와 함수 선언문 등을 소스코드에서 찾아서 실행한다. 이때 변수를 저장할 메모리 공간을 미리 확보하여 undefined라는 값이 암묵적으로 할당되어 초기화된다. 그리고 이런 평가 과정이 끝나면 모든 선언문을 제외하고 위에서부터 한 줄 씩 실행한다.

이처럼 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 호이스팅이라고 한다. var, let, const, function, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅된다.

그렇다면 ES6에서 사용되는 변수 선언문인 let과 const가 동작하는 방식을 알아보자.

console.log(b)

let b = 'banana'

위 코드를 실행하면 undefined가 출력될까? 정답은 NO!

let은 var과 달리 변수를 저장할 메모리 공간을 미리 확보하지 않아 값이 undefined로 초기화되지 않는다. 대신 코드를 위에서 아래로 실행할 때 변수 선언문에 도달하면 초기화 단계를 맞이하게 된다. 이러한 이유로 초기화 이전에 변수에 접근하면 참조 에러(Reference Error)가 발생한다.

const는 재할당과 재선언이 불가능하기 때문에 선언과 할당을 동시에 진행해야 한다. 만약 선언 이전에 변수에 접근하거나 이미 선언된 변수에 다른 값을 할당한다면 참조 에러가 발생한다.

More from this blog

시맨틱하게 다이얼로그 만들기

웹에서 양식을 제출하기 위한 다이얼로그를 작성할 때 시맨틱 태그를 무시하고 div 태그를 활용해 css로 스타일링을 하는 경우가 많다. 이렇게 작성할 경우, 동작에는 전혀 무리가 없지만 하지 않아도 될 스타일링 작업을 하는 데 시간을 쏟을 수 있고 웹접근성 측면에도 좋지 않다. 웹에서 다이얼로그는 모달, 대화상자, 알림창, 검사기와 같은 상호작용 가능한 컴포넌트를 말한다. HTML에서는 dialog 라는 태그를 사용하면 핵심적인 다이얼로그의 기...

Jan 13, 20262 min read

[JavaScript] 이미지 사이즈 압축해서 용량 줄이기

이미지를 받아서 저장하는 기능을 구현하고 며칠이 지난 후 한 가지 이슈를 발견하였다. 바로 이미지 업로드가 되지 않는 아주 치명적인 문제였다! 분명 테스트도 수 없이 진행하고 배포한 후에도 잘만 동작했는데 갑자기 이런 일이 왜 벌어진걸까? 문제 해결의 원인을 찾기 위해 다양한 방법을 시도하였다: 갤럭시의 갤러리에 있는 이미지 업로드 갤럭시의 카메라로 직접 찍어서 업로드 아이폰의 갤러리에 있는 이미지 업로드 아이폰의 카메라로 직접 찍어서 ...

Nov 16, 20242 min read
[JavaScript] 이미지 사이즈 압축해서 용량 줄이기

[JavaScript] 이미지 수정 시 브라우저 캐싱 방지하기

웹 개발을 하면서 한 번쯤 겪어볼 수 있는 이슈가 있다. A 사용자가 이미지를 업로드하면 B 사용자가 그 이미지를 확인하고, 재업로드를 요청하는 플로우다. A 사용자가 새로운 이미지를 업로드 했는데도 B 사용자는 여전히 처음 이미지를 볼 수 있다. 이 문제는 서버 측에서 "이미지 경로는 그대로 유지하고 이미지를 덮어씌운다"는 구조와 관련이 있다. 브라우저는 URL이 동일하면 캐싱된 이미지를 가져와 네트워크 요청을 줄인다. 따라서 새로운 이미지가...

Oct 3, 20242 min read
[JavaScript] 이미지 수정 시 브라우저 캐싱 방지하기

[React] 렌더링 관점에서 보는 react-hook-form (feat. useRef)

평소 한땀한땀 기능을 만들어나가는 걸 좋아해서 유명한 라이브러리들을 사용해보지 않았는데, 회사에서 프로젝트를 진행하며 다양한 라이브러리를 사용해보았다. 그 중 React-Hook-Form을 사용하며 평소에 리액트로 폼을 작성하며 겪은 불편한 점을 많이 해소했다. 코드 길이, 예외 처리, 렌더링 등 다양한 관점에서 개선할 수 있게 되었다. 오늘은 다양한 폼 상태 관리 방법을 비교하여 React-Hook-Form의 장점을 알아보자. useState...

Sep 5, 20243 min read
[React] 렌더링 관점에서 보는 react-hook-form (feat. useRef)

Untitled Publication

53 posts