inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바스크립트 중고급: 엔진 핵심

8. 호이스팅, 함수 앞에서 호출, [코딩 시간]

호이스팅 관련 정리

331

simoniful

작성한 질문수 10

2

호이스팅 KeyWord

호이스팅 : 함수 앞에서 함수를 호출

함수 선언문 : 

function 함수명() {
  구현 로직
};

호이스팅에 영향, 초기화 단계에서 function object 할당

함수표현식 : 

var 함수명 = function () {
  구현 로직
};

호이스팅에 영향 X

예제풀이

1 번 예제

function book() {
  function getBook(){
    return "책1";
  };
  //여기서 함수 호출
  console.log(getBook());
  function getBook(){
    return "책2"
  };
};
book();

1. book 함수 호출

2. book 함수 안으로 엔진컨트롤 이동 

// 함수 선언문 해석

3. 전체 코드에서 함수 선언문 검색

4. 첫 번째 function 오브젝트 생성(getbook) - scope 등록

5. 두 번째 function 오브젝트 생성(getbook) - scope 등록, value 대체, 호출 가능

6. 엔진 컨트롤 처음으로 이동

// 변수 초기화(추출) - 식별자 해결

7. var 변수 초기화(undefined) - 대상 없음

8. 엔진 컨트롤 처음으로 이동

// 코드 실행 - debugger, console 등 실행코드 동작

9. 해석된 선언문은 건너 뜀

10. console.log로 getBook 호출

11. value로 scope에 등록된 두 번째 getBook에서 선언문 해석, 변수 초기화, 코드실행 과정 수행

12. 책2 반환

13. 콘솔창 출력

14. book 함수 내 반환값이 없기에, void 함수로 처리되어 undefined를 반환

2번 예제

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

1. book 함수 호출

2. book 함수 안으로 엔진컨트롤 이동 

// 함수 선언문 해석

3. 전체 코드에서 함수 선언문 검색 - 대상없음

4. 엔진 컨트롤 처음으로 이동

// 변수 초기화(추출) - 식별자 해결

5. getBook에 undefined 할당 초기화

6. scope에 등록

7. 엔진 컨트롤 처음으로 이동

// 코드 실행 - debugger, console 등 실행코드 동작

8. getBook에 function(){ return "책1"; } 할당

9. scope 등록

10. console.log로 getBook 호출

11. 변수로 지정된 첫 번째 getBook에서 표현식 실행

12. 책1 반환

13. 콘솔창 출력

14. 다음 함수 표현식을 엔진이 해석하지만, 실행코드에 의미가 없기에 순차적인 진행 종료

15. book 함수 내 반환값이 없기에, void 함수로 처리되어 undefined를 반환

3번 예제

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

1. book 함수 호출

2. book 함수 안으로 엔진컨트롤 이동 

// 함수 선언문 해석

3. 전체 코드에서 함수 선언문 검색

4. 첫 번째 function 오브젝트 생성(getbook) - scope 등록

5. 엔진 컨트롤 처음으로 이동

// 변수 초기화(추출) - 식별자 해결

6. 변수 getBook에 undefined 할당 초기화

7. scope에 등록

8. 엔진 컨트롤 처음으로 이동

// 코드 실행 - debugger, console 등 실행코드 동작

9. 해석된 선언문은 건너 뜀

10. console.log로 getBook 호출

11. value로 scope에 등록된 getBook에서 선언문 해석, 변수 초기화, 코드실행 과정 수행

12. 책1 반환

13. 콘솔창 출력

14. 다음 함수 표현식을 엔진이 해석하지만, 실행코드에 의미가 없기에 순차적인 진행 종료

15. book 함수 내 반환값이 없기에, void 함수로 처리되어 undefined를 반환

4번 예제

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

1. book 함수 호출

2. book 함수 안으로 엔진컨트롤 이동 

// 함수 선언문 해석

3. 전체 코드에서 함수 선언문 검색

4. function 오브젝트 생성(getbook) - scope 등록

5. 엔진 컨트롤 처음으로 이동

// 변수 초기화(추출) - 식별자 해결

6. 변수 getBook에 undefined 할당 초기화

7. scope에 등록

8. 엔진 컨트롤 처음으로 이동

// 코드 실행 - debugger, console 등 실행코드 동작

9. getBook에 function(){ return "책1"; } 할당

10. scope 등록

11. console.log로 getBook 호출

12. 변수로 지정된 getBook에서 표현식 실행

13. 책1 반환

14. 콘솔창 출력

15. book 함수 내 반환값이 없기에, void 함수로 처리되어 undefined를 반환

알맞게 정리된 건지 궁금합니다..

호이스팅 javascript 함수선언문 함수표현식

답변 2

3

김영보

대체적으로 정리가 잘 되었으며, 좋습니다.^^
다만, 용어 사용을 조금 신경쓰면 되겠습니다.

예를 들면, 자바스크립트에 "void 함수" 용어가 없습니다.
함수에 return 문이 없으면 undefined를 반환하며, 자바스크립트에서 undefined는 값입니다.

"호이스팅에 영향 X"는 오브젝트 기준으로 본 것으로, 변수 이름을 식별하는 관점에서 보면 호이스팅에 해당합니다. var 변수를 위에서 사용할 수 있다는 것은, 호이스팅에 해당합니다. 다만 값이 undefined입니다. 변수일 경우 호이스팅으로 인해 변수를 식별할 수 있어 에러가 발생하지 않습니다. 

이외에도 몇 개(주어가 바뀐 것등)가 완전하지 않는 것이 있습니다. 자세하게 정리했으니 다시 깨끗하게 정리하면 완전하게 내 것이 될 것 같습니다. 지금 하면 시간도 많이 걸리고 완전하게 정리하지 못할 수도 있으므로 강좌 전체를 듣고 정리하는 것도 하나의 방법입니다.

1

simoniful

감사합니다! 조금씩 따라가며 제대로 익히도록 더 노력해야겠네요

getBook 실습 예제중 질문드립니다!

0

419

1

__proto__ 에 대해 질문드립니다

0

315

1

호이스팅 코딩시간 풀이

0

358

1

[코딩 시간] JS {name: value} 이해

0

340

1

[[Scope]] 와 [[Environment]]는 같은 개념인가요

0

345

0

slice

0

239

0

스코프가 뭔가요?

0

307

0

어려워요

0

255

0

강사님 변수이름에 get을 붙이는 이유를 알고싶습니다.

0

339

1

[정리 시간] 정확하게 이해했는지 확인 부탁드립니다.

0

300

0

스코프 질문

0

253

1

fn 함수와 book.get 함수 차이 질문드립니다...ㅠㅠㅠ

1

542

1

this binding 논리 질문입니다.

0

279

1

파라미터 값을 매핑할 때

0

251

0

ES6부터는 this 바인딩을 환경 레코드에서 참조한다고 들었습니다.

0

209

0

정리시간 입니다.

0

228

0

정리시간입니다.

6

269

0

정리 시간 입니다.

0

202

0

정리시간입니다.

6

227

0

코딩시간 입니다.

1

222

0

선생님 스코프 질문이 있습니다.

1

240

0

[정리시간] 해보았습니다!

0

175

0

선생님 질문있습니다!!

0

159

0

질문드려도 될까요 선생님..

0

216

0