쭈꾸미
코드짜는 쭈꾸미
쭈꾸미
전체 방문자
오늘
어제
  • 분류 전체보기 (122)
    • Journal (54)
      • Today I Learned (44)
      • 후기&회고 (4)
      • 개인 프로젝트 (4)
      • 독서일기 (2)
    • HTML, CSS (5)
    • Javascript (32)
    • Typescript (2)
    • Git, Github (4)
    • Algorithm (1)
    • React, Next.js (14)
    • API, Database (6)
      • API (0)
      • Database (1)
      • GraphQL (2)
      • Rest-API (1)
    • React-Native (1)
    • ETC (2)
    • OS (1)
      • 우분투 Ubuntu (1)

인기 글

티스토리

hELLO · Designed By 정상우.
쭈꾸미

코드짜는 쭈꾸미

[Javascript] 호이스팅이란? | Hoisting
Javascript

[Javascript] 호이스팅이란? | Hoisting

2022. 1. 17. 17:07

호이스팅이란?

"끌어올린다"는 뜻. 함수 안에서 변수의 선언만 분리해서 코드의 최상단으로 옮기는 것이다.

 

Code1

console.log(aaa)
var aaa = 3

Code1을 실행했을 경우 Undefined가 뜨는 것을 확인할 수 있다.

위와 같은 코드가 있다고 가정해보자. console.log(aaa)는 aaa를 선언하기 전에 불러왔으니 오류가 나야 정상이다. 하지만 undefined일 뿐 실행은 된다. 이것은 var aaa = 3 이 호이스팅 됐기 때문이다. 이러한 현상은 var로 변수/상수를 선언했을 때에 발생한다.

 

Code2

console.log(bbb)
const bbb = 2

Code2를 실행했을 경우 오류가 나는 것을 확인할 수 있다.

그렇다면 let/const는 어떨까?

여기도 마찬가지로 호이스팅은 이루어지나, TDZ(Temporal Dead Zone)라는 별개의 임시공간에 저장되었기 때문에 오류가 난다. 이러한 작동이 대부분의 컴퓨터 언어의 기본이다.

 

* 아직 let/const가 없었떤 ES6 이전에는 호이스팅이 표준 명세에 나타나지 않는다. 당시에는 호이스팅이 JavaScript의 동작 방식을 설명하는 일반적인 방법이었다. (참고: https://developer.mozilla.org/ko/docs/Glossary/Hoisting)

 

함수의 경우

여기서 문제는, 함수도 호이스팅이 된다!

위와 같은 코드를 입력하고 라이브 서버를 띄워보면, zzz라는 함수가 호이스팅되어서 코드 순서가 뒤집혔음에도 정상 작동 되는 것을 확인할 수 있다. (단, 이 경우 같은 이름의 함수 두개를 function으로 정의했기 때문에 함수가 꼬여 오류가 발생할 가능성이 높다.)

 

이러한 경우에 화살표 함수를 이용하면 조금 더 안정적으로 사용할 수 있다.

  • 기본 함수보다 조금 더 느릴 수 있지만 안전성은 높다.
  • 리액트의 경우 추가 기능으로 속도를 보완할 수 있다.

화살표 함수를 이용한 예시

'Javascript' 카테고리의 다른 글

[Javascript] 예외 처리 / try ... catch ... finally  (0) 2022.01.19
[Javascript] 실무 반복문 map / filter  (0) 2022.01.18
[Javascript] async와 await | 동기와 비동기 방식  (0) 2022.01.17
[Javascript] 템플릿 리터럴 | Template literals  (0) 2022.01.14
[Javascript] 객체의 Key와 Value가 동일한 경우 | Shorthand Property  (0) 2022.01.14
    'Javascript' 카테고리의 다른 글
    • [Javascript] 예외 처리 / try ... catch ... finally
    • [Javascript] 실무 반복문 map / filter
    • [Javascript] async와 await | 동기와 비동기 방식
    • [Javascript] 템플릿 리터럴 | Template literals
    쭈꾸미
    쭈꾸미
    느리지만 확실하게 / 웹 프론트엔드 개발자 TIL : https://jooeun-k.github.io/TIL/

    티스토리툴바