• 티스토리 홈
  • 프로필사진
    루루개발자
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
루루개발자
  • 프로필사진
    루루개발자
    • 분류 전체보기 (212)
      • react & next.js (12)
      • Node.js & Javascript & Type.. (24)
        • d3.js (10)
      • 차트 만들기 (1)
      • 티스토리 스킨 개발 (7)
      • 내가 만든 패키지 (3)
      • 내가 만든 CSS (1)
      • CSS (7)
      • 도커 & 쿠버네티스 (3)
      • 개인 프로젝트 (7)
      • 리뷰 & 추천 (2)
      • 알고리즘 (1)
      • IT 기타 (18)
      • 잡동사니 (1)
      • Spring Boot (5)
      • 취미로 그리는 그림들 (120)
      • 개인적인 생각들 (0)
  • 반응형
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 호이스팅 (hoisting) (1)
        2021년 11월 15일
        • 루루개발자
        • 작성자
        • 2021.11.15.오후05:08
        반응형

        안녕하세요. 이번에는 Javascript 에서의 호이스팅 이란 개념에 대해 알아보겠습니다.

         

        ▣ 호이스팅이 뭐야?

        Javascript 에서 호이스팅이란 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 말합니다. 다른 말로 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는 것으로 말하기도 합니다. 

         

        ▣ 호이스팅 예시 (var, function)

        var aa;
        console.log('aa', aa);

         

         

        console.log('aa', aa);
        var aa;

         

        => aa 가 호이스팅 되어, 선언과 동시에 undefined 로 초기화가 되어, console.log 에서 undefined 가 표시됨

         

        function aa() {
            console.log('aa 함수 호출됨!');
        }
        
        aa();

         

         

        aa();
        
        function aa() {
            console.log('aa 함수 호출됨!');
        }

         

        => aa 가 호이스팅 되어, 선언과 동시에 초기화가 되어, 함수 내용이 정상적으로 실행됨

         

        위 4개 상황에서 var 변수와 함수선언 부분들이 모두 호이스팅 되어 정상 작동한다고 볼 수 있습니다. 이 때 var 로 선언된 변수는 선언됨과 동시에 초기화가 이루어 집니다. 함수도 마찬가지로 선언과 동시에 초기화가 된다고 생각하시면 됩니다. 그림으로 표현하면 다음과 같이 표현 할 수 있을 것 같습니다.

        위 그림과 같이 호이스팅 영역에서 변수 및 함수가 선언됨과 동시에 초기화가 되어 해당 변수 선언 및 함수가 실행 코드보다 이후에 있더라도 정상 작동하게 됩니다.

         

        ▣ 호이스팅 예시 (let, const)

        하지만 let, const 등을 사용하게 되면 약간 다른 상황이 발생하게 됩니다. 다음은 let, const 를 사용한 예시 입니다.

         

        let uname;
        console.log('uname', uname);

         

        console.log('uname', uname);
        let uname;

        => let 으로 선언된 uname 이 호이스팅은 되었지만, 값이 초기화가 되지 않아 에러 발생

         

        const uage;
        console.log('uage', uage);

        => const 으로 선언된 uage 변수에 값을 초기화 하지 않아 에러 발생 (const 는 변수 선언과 초기화를 동시에 명시해 주어야 함)

         

        console.log('uage', uage);
        const uage = 28;

        => const 으로 선언된 uage 변수가 호이스팅은 되었지만, 초기화가 되지 않아 에러 발생

         

         

        위 예시들과 같이 let, const 으로 선언된 변수들은 선언과 동시에 값이 초기화 되지 않습니다. 선언과 초기화 단계가 분리가 되어 있습니다. 그래서 let, const 는 호이스팅 때 변수 선언까지만 이루어 지고 초기화는 이루어지지 않기 때문에 해당 변수를 사용할 시 에러가 발생합니다. 여기서 유의하셔야 할 점이 있습니다. let 과 const 는 호이스팅이 이루어 지지 않는 걸로 표현된 경우가 있는데 이는 잘못된 정보이며, let 과 const 도 호이스팅은 되지만 호이스팅 때 값이 초기화가 이루어지지 않을 뿐입니다. 그림으로 표현하면 다음과 같이 표현 할 수 있을 것 같습니다.

         

        var uname = 30; 은 uname 변수 선언과 30 이라는 값의 초기화가 같은 단계에서 이루어 집니다. 반면 let uname = 30; 이나 const uname = 30; 같은 경우는 변수 선언과 30 이라는 값의 초기화가 각기 다른 단계에서 이루어 집니다. 이러한 차이를 염두에 두시면 호이스팅을 이해하는데 더 도움이 될 것 같습니다.

         

         

        이상입니다.

         

        만약 잘못된 부분이 있다면 댓글로 말씀해주세요!

         

         

         

         

         

        출처

        https://developer.mozilla.org/ko/docs/Glossary/Hoisting
         
         
         

         

        반응형

        'Node.js & Javascript & Typescript' 카테고리의 다른 글

        웹에서 url scheme 로 앱 호출시 앱 설치 여부 감지 방법  (0) 2022.06.09
        javascript 난독화 이슈 (생성자 인자의 파라미터명)  (0) 2022.05.11
        javascript 파일 난독화  (0) 2022.05.10
        TDZ(Temporal Dead Zone)  (0) 2021.11.16
        Javascript 동작 원리  (0) 2021.10.26
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
      • ▣ 호이스팅이 뭐야?
      • ▣ 호이스팅 예시 (var, function)
      • ▣ 호이스팅 예시 (let, const)
      • 안녕하세요
      • 감사해요
      • 잘있어요

      티스토리툴바

      단축키

      내 블로그

      내 블로그 - 관리자 홈 전환
      Q
      Q
      새 글 쓰기
      W
      W

      블로그 게시글

      글 수정 (권한 있는 경우)
      E
      E
      댓글 영역으로 이동
      C
      C

      모든 영역

      이 페이지의 URL 복사
      S
      S
      맨 위로 이동
      T
      T
      티스토리 홈 이동
      H
      H
      단축키 안내
      Shift + /
      ⇧ + /

      * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.