• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

호이스팅 코딩시간 풀이

23.07.17 19:47 작성 조회수 181

0

  1. 함수 선언문 , 함수 호출, 함수 선언문

function book(){
    function getBook(){
        return "책1";
    };
    console.log(getBook());
    function getBook(){
        return "책2";
    };
}
book();

book을 호출하면 1.선언단계에서 첫번째 getBook 함수 선언문을 만나 해당 함수를 책1로 등록하고 log는 선언단계임으로 그냥 지나가고 두번째 getBook 함수 선언문을 만나 해당 함수가 이미 존재함으로 값을 책2로 변경시켜준다. 2. 초기화 단계는 변수가 없기 때문에 지나가고 3. 할당단계에서 console.log를 만나 getBook함수를 호출하는데 이 때 값은 마지막에 받은 책 2로 출력된다.

  1. 함수 표현식, 함수 호출, 함수 표현식

var num = function calculation(a, b){
    return a + b;
};

console.log(num(9, 4));

var num = function calculation(a, b){
    return a * b;
};

선언단계에서는 함수가 없기 때문에 지나가고 초기화 단계에서 첫번째 변수 num의 값을 undefined 로 초기화 시키고 두번째 변수 num의 값 또한 undefined 로 초기화 시킨다. 할당단계가 되면 첫번째 변수 num에 값에 calculation 함수를 할당하고 console.log를 만나서 변수 num을 호출한다 이때 첫번째 변수 num이 호출된다. 그래서 log의 값은 13이 출력된다. 그 이후 두번째 변수 num의 값에 calculation 함수를 할당한다.

  1. 함수 선언문, 함수 호출, 함수 표현식

function sports(){

    function getSports(){
        return "농구";
    };

    console.log(getSports());

    var getSports = function() {
        return "야구"
    };
}
sports();

선언 단계에서 함수 getSports 를 만나 등록하고 로그 지나치고 변수도 지나친다. 초기화 단계에서는 다시 위로가서 함수 지나치고 로그 지나치고 변수 getSports의 값을 undefined 로 초기화 시킨다. 마지막 할당 단계에서 다시 처음으로 올라가 함수 getSports를 지나가고 log를 만나 getSports를 호출한다 이때 위에 선언된 getSports 함수가 호출 됨으로 log 값은 농구가 출력된다. 그 후 아래의 변수 getSports의 값에 함수를 할당한다.

  1. 함수 표현식, 함수 호출, 함수 선언문

function movie(){

    var getMovie = function() {
        return "아이언맨"
    };

    console.log(getMovie());

    function getMovie(){
        return "스파이더맨";
    };
}
movie();

선언 단계에서 변수 지나치고 log 지나치고 함수 getMovie를 만나서 등록한다. 초기화 단계에서 변수 getMovie의 값을 undefined 로 초기화 시킨다. log와 함수는 지나친다. 할당 단계에서 변수 getMovie의 값에 함수를 할당 시켜주고 log를 실행한다. 이때 호출되는 값은 "아이언맨"이다.

log값을 호출하는 시점에서 위에 있는 수의 값이 undefined가 아닌 값이 할당 된 상태라면 위의 값이 나오고 그렇지 못한 경우에는 아래의 값이 나온다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.18

안녕하세요, 인프런 AI 인턴이에요.

코드에서 호이스팅을 이해하셨네요. 호이스팅은 JavaScript에서 변수 및 함수 선언을 해당 영역의 맨 위로 이동시키는 작업을 말합니다.

첫 번째 예제에서 book 함수를 호출하면 먼저 함수 선언문인 getBook 함수들이 호이스팅되어 선언되고 값을 할당합니다. 하지만 첫 번째 getBook 함수 선언문은 두 번째 getBook 함수 선언문에서 재선언되기 때문에 최종적으로 getBook 함수는 “책2”를 반환합니다. 따라서 console.log(getBook())의 결과는 “책2”가 출력됩니다.

두 번째 예제에서는 함수 표현식을 사용했습니다. 선언 단계에서는 변수 num이 undefined로 초기화되지만, 할당 단계에서 첫 번째 num 변수에 calculation 함수가 할당되고 console.log에서 호출됩니다. 따라서 console.log(num(9, 4))의 결과는 13이 출력됩니다.

호이스팅은 코드의 가독성을 떨어뜨릴 수 있으므로, 변수와 함수 선언을 코드 상단에 명시하는 것을 권장합니다. 또한, 호이스팅을 피하기 위해 가능하면 함수 표현식을 사용하는 것이 좋습니다.

더 궁금한 점이 있다면 언제든지 물어보세요!