• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[코딩 시간]의 작성 내용입니다.

21.05.20 13:57 작성 조회수 296

7

선생님 안녕하세요. 

하기와 같이 작성해봤는데 제대로 이해하고 있는 게 맞는지 확인 부탁드립니다. 

1. 함수 선언문 해석

book()함수를 호출하면 가장 먼저 함수 블록 안에서 함수 선언문을 찾음. 

function getBook() { return '책1'; }을 만나서 getBook이라는 이름의 function 오브젝트를 생성. 

그 다음으로 function getBook() { return '책2'; } 을 만남. 

해당 함수 선언문 역시 function 오브젝트를 생성하는데, 첫번째 함수 선언문의 오브젝트와 이름이 같아 getBook이라는 이름의 value  값은 두번째 함수 선언문의 function 오브젝트로 변경됨.

다시 함수 블록의 첫번째 줄로 이동.

2. 변수 초기화

초기화 할 변수가 없음 .

다시 함수 블록의 첫번째 줄로 이동.  

3. 코드 실행 

console.log(getBook());에서 getBook() 함수를 호출하고 function getBook() { return '책2'; }의 함수 블록으로 이동하여 '책2'라는 값을 반환 후 '책2'를 콘솔창에 출력 .

1. 함수 선언문 해석 

함수 선언문이 없으므로 다시 함수 블록의 첫번째 줄로 이동.

2. 변수 초기화 

getBook이라는 변수의 값을 undefined로 초기화. 

다시 한번 getBook이라는 변수를 만나고 undefined로 초기화.

*이 부분이 헷갈리는데요, getBook이라는 변수를 다시 한번 만났을 때,  이미 getBook에 undefined라는 값이 있기 때문에 추가적인 처리를 하지 않는다고 이해하는 게 맞을까요?

아니면 getBook이라는 변수에 새롭게 undefined를 할당한다고 이해하는 게 맞을까요?*

다시 함수 블록의 첫번째 줄로 이동.  

3. 코드 실행

getBook이라는 변수에 function 키워드가 있으므로 function 오브젝트를 생성하여 getBook 변수에 할당. getBook이 function 오브젝트가 되므로 getBook() 함수를 호출 가능.

console.log(getBook());에서 getBook() 함수가 실행되고 함수 블록으로 이동하여 '책1'을 반환. 이를 콘솔창에 출력.

var getBook = function () { return '책2'; };에서 function 키워드를 만나 getBook이라는 이름의 function 오브젝트를 생성, 기존의 getBook 이라는 이름의 function 오브젝트가 function () { return '책2'; }로 변경됨.

1. 함수 선언문 해석 

function getBook() { return '책1'; };이 함수 선언문이므로 getBook이라는 이름의 function 오브젝트를 생성.

더 이상의 함수 선언문이 없으므로 함수 블록의 첫번째 줄로 이동. 

2. 변수 초기화

getBook이라는 변수의 값을 초기화하려고 했지만, 이미 getBook이라는 이름으로 fucntion 오브젝트가 존재함.

따라서 초기화하지 않고 넘어감. 

다시 함수 블록의 첫번째 줄로 이동.  

3. 코드 실행

console.log(getBook());에서 getBook()함수를 호출하고 해당 함수에서 반환한 '책1'을 콘솔창에 출력.

var getBook = function () { return '책2'; };에서 function 키워드를 만나 function 오브젝트를 생성. 이를 getBook이라는 변수에 할당하면서 함수 선언문에서 생성된 getBook이라는 이름의 값이 해당 function 오브젝트로 변경됨.

1. 함수 선언문 해석

function getBook() { return '책2'; }이 함수 선언문이므로 getBook이라는 function 오브젝트를 생성.

더 이상의 함수 선언문이 없으므로 함수 블록의 첫번째 줄로 이동.

2. 변수 초기화 

var getBook = function () { return '책1'; };에서 getBook이라는 변수에 undefined를 할당하려고 했으나 이미 getBook이라는 이름의 값으로 function 오브젝트가 존재하여 undefined를 할당하지 않고 기존의 값을 유지.

더 이상의 변수가 없으므로 다시 함수 블록의 첫번째 줄로 이동. 

3. 코드 실행 

var getBook = function () { return '책1'; };에서 function 키워드를 만나 function 오브젝트를 생성하고 이를 getBook 변수에 할당. 기존의 getBook의 값이 변경됨. 

console.log(getBook());에서 getBook()함수를 호출하여 '책1'을 반환하고 해당 값을 콘솔창에 출력.

감사합니다!!

답변 1

답변을 작성해보세요.

2

깨끗하게 정리가 잘 되었습니다. 저렇게 정리하는 것이 쉽지 않은 데,  대단하십니다.^^
----------------
*이 부분이 헷갈리는데요, getBook이라는 변수를 다시 한번 만났을 때, 이미 getBook에 undefined라는 값이 있기 때문에 추가적인 처리를 하지 않는다고 이해하는 게 맞을까요? 
아니면 getBook이라는 변수에 새롭게 undefined를 할당한다고 이해하는 게 맞을까요?*

==> 스펙에 기술되어 있지 않지만, undefined를 다시 할당하더라도 영향을 미치지 않으며, var 변수이므로 undefined를 할당한다는 것이 일관성이 있을 것 같습니다. 이 시점에서는 값보다 변수 선언이 포인트이니까요.

이하영님의 프로필

이하영

질문자

2021.05.21

감사합니다! ㅜㅜ