기은P
시간이 멈추는 장소
기은P
  • Programming (272)
    • 개발노트 (1)
    • FrontEnd (56)
      • ES&JS 문법 (14)
      • HTML&CSS (4)
      • React 기본 (18)
      • React 심화 (12)
      • React 이슈 (2)
      • Project 연습 (1)
      • Next.js (5)
    • Backend&Devops (33)
      • AWS (2)
      • Docker (9)
      • Jenkins (6)
      • Nginx (6)
      • Node.js (1)
      • ElasticSearch (5)
      • 프레임워크&아키텍처 (2)
      • 암호화 (0)
      • 기타 (2)
    • 알고리즘 (3)
    • C# (8)
      • WPF (8)
    • Java (51)
      • 순수 Java (18)
      • RDF&Jena (12)
      • RCP&GEF (9)
      • JMX (5)
      • JMapper (3)
      • 오류해결 (4)
    • Database (21)
      • RDBMS (9)
      • NoSQL (2)
      • TSDB (1)
      • GraphQL (1)
      • Hibernate (3)
      • 데이터베이스 이론 (4)
      • Redis (1)
    • 프로토콜 (11)
      • Netty (4)
      • gRPC (5)
      • 프로토콜 개념 (2)
    • Server (4)
      • Linux (4)
    • 2020 정보처리기사 필기 (43)
      • 목차 (1)
      • 기출문제 (1)
      • 1과목 - 소프트웨어 설계 (6)
      • 2과목 - 소프트웨어 개발 (7)
      • 3과목 - 데이터베이스 구축 (8)
      • 4과목 - 프로그래밍 언어 활용 (7)
      • 5과목 - 정보시스템 구축 관리 (10)
    • 2020 정보처리기사 실기 (31)
      • 목차 (4)
      • 기출예상문제 (19)
      • 실기요약 (8)
    • 빅데이터분석기사 필기 (4)
      • 목차 (0)
      • 필기 요약 (3)
    • 전기 공학 (1)
      • CIM (1)
    • 산업자동화시스템 (3)
      • SCADA (1)
      • OPC UA (2)
    • 디자인패턴 (1)
    • 휴지통 (0)

공지사항

  • 공지사항/포스팅 예정 항목

최근 댓글

최근 글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
기은P

시간이 멈추는 장소

FrontEnd/ES&JS 문법

[Javascript] 호이스팅이란?

2022. 10. 17. 14:00
반응형

1. 호이스팅이란?

함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것을 말합니다.

 

 

 

 

2. 자바스크립트 함수 동작 원리

1) 자바스크립트 Parser가 함수 실행 전 해당 함수를 한번 훑는다.

2) 함수안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 실행한다. (함수 블록 {} 안에서만.)

3) 함수를 실행할 때, 호출한 위치보다 해당 함수가 하단부에 있을 경우 자바스크립트 Parser가 내부적으로 함수 위치를 끌어올려서 처리한다. -> 호이스팅

* 실제 메모리에서는 변화가 없습니다.

 

 

Why? 자바스크립트에서 함수를 선언하는 방식이 함수선언식과 함수표현식이 있습니다.

 

// 함수선언식
function test1() {
 return 1;
}
// 함수표현식
var test2 = function() {
 return 2;
}

 

자바스크립트에서는 함수도 객체로 인식되기 때문에 변수에 할당이 가능해서 함수표현식처럼 변수값에 함수 표현을 담아서 사용할 수 있습니다.

이 함수표현식의 장점 때문에 호이스팅이 사용되는데요.

함수표현식을 사용하면 클로저로 사용할 수 있고, 다른 함수의 인자로 넘기는 콜백(함수도 객체이기 때문에)으로 사용할 수 있기 때문입니다.

 

 

 

3. 함수표현식의 호이스팅 예제

/* 정상 */
 function printName(firstname) { // 함수선언문
     var inner = function() { // 함수표현식
         return "inner value";
     }
       
     var result = inner(); // 함수 "호출"
     console.log("name is " + result);
 }
 
 printName(); // > "name is inner value"
/* 오류 */
 function printName(firstname) { // 함수선언문
     console.log(inner); // > "undefined": 선언은 되어 있지만 값이 할당되어있지 않은 경우
     var result = inner(); // ERROR!!
     console.log("name is " + result);
 
     var inner = function() { // 함수표현식
         return "inner value";
     }
 }
 printName(); // > TypeError: inner is not a function

  

함수 표현식에 대한 할당이 호출하는 위치보다 밑에 있을 경우 에러를 발생합니다.

따라서 함수표현식을 사용할 때에는 코드의 최상단에 작성하도록 하거나, 혹은 let, const를 사용하면 됩니다.

 

 

참고

https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html

반응형
저작자표시 변경금지 (새창열림)

'FrontEnd > ES&JS 문법' 카테고리의 다른 글

[Javascript] 이벤트 버블링  (0) 2022.10.18
[Javascript] 이벤트 루프와 태스크 큐  (0) 2022.10.18
[Typescript] 자주 쓰는 문법 정리  (1) 2022.09.08
[Javascript] RxJS란?  (0) 2022.05.26
[Javascript] 클로저(Closure) 요약  (0) 2022.04.21
    'FrontEnd/ES&JS 문법' 카테고리의 다른 글
    • [Javascript] 이벤트 버블링
    • [Javascript] 이벤트 루프와 태스크 큐
    • [Typescript] 자주 쓰는 문법 정리
    • [Javascript] RxJS란?
    기은P
    기은P
    기은P의 블로그 일상과 개발 관련 포스팅 #React #Typescript #Next #Nest https://github.com/kimdongjang

    티스토리툴바