메뉴 건너뛰기

2020.08.29 17:47

p.469 실습 5번문제

조회 수 92 댓글 4

안녕하세요 저자님.

 

p.469 실습 5번문제 질문드립니다.

https://ancandy.github.io/web1/s5.html (정상)

https://ancandy.github.io/web1/s5%EC%97%90%EB%9F%AC.html (에러)

 

realTime함수에서

window.setTimeout("realTime(div)", 1000);  이렇게 하면 시간이 안바뀌고 콘솔창에 

오류가 갑니다. (obj로 바꿔도 오류)

그런데, <div>태그 id값인 "a"를 주면 잘작동합니다.

 

Q. 왜 id값을 주면 작동하는건가요?

?
  • ?
    관리자 2020.08.29 21:20
    1. 일단 다음과 같이 작성되어야 정답이라고 할 수 있겠습니다.

    var div = null;
    function init(){
    div = document.getElementById("a");
    realTime(div);
    }
    function realTime(obj){
    var date = new Date();
    obj.innerHTML = date.toLocaleTimeString();
    window.setTimeout("realTime(div)", 1000);

    }

    2. 독자가 작성한 정상 코드가 사실은 정상이라고 하기에는 좀...
    왜냐하면 다음 부분에서 a의 존재는 표준인지 확실치 않네요.
    window.setTimeout("realTime(a)", 1000);

    a라는 변수가 선언되지 않았으니 realTime() 함수가 호출될 때 a가 넘어가는데 브라우저의 자바스크립트 엔진은 a의 존재를 무엇이라고 판단할까요?
    아마도 id=a인 div 객체로 처리한 것 같습니다. 이런 방식은 과거 HTML4에서 사용하던 방식인데 현재로 사용하고 있는지 불확실합니다.
    그래서 정답은 1.에서 제시한 것처럼 웹페이지가 적재된 직후 실행된 init()에서 id=a인 객체를 확실히 찾고 이 객체를 가리키는 변수 div를 전역변수로 선언하고
    realTime() 함수에 div 를 전달하는 것으로 하면 명확히 정리됩니다.
  • ?
    열심히 공부하는 독자 2020.08.29 21:36

    네 저도
    window.setTimeout("realTime(div)", 1000); <<이것인걸 알고있습니다.
    그런데,

    콘솔창에 "Uncaught ReferenceError: div is not defined" 이오류가 나오면서
    window.setTimeout("realTime(div)", 1000); 이렇게 작성하면 시간이 안변합니다.


    window.setTimeout("realTime(a)", 1000); << 이렇게 하면 시간이 변하구요.

     

    그리고 저도 처음에 

    var div; 전역변수로해서 만들었습니다. 그런데,

    저자님께서 올려주신 정답파일을 보고 똑같이 했는데 안되서 질문드렸습니다.

    정답파일 확인 부탁드립니다.

    https://ancandy.github.io/web1/prac10-05.html

  • ?
    관리자 2020.08.29 22:45

    * 이 홈페이지의 서버에 가끔 문제가 있어서 어떤 패턴의 코드가 포함된 답이 등록되지 않는 현상이 있습니다.
    그래서 제가 여러번 시도하도가 포기하고 간단히 답을 드립니다.

    독자의 정답을 보았는데
    코드가 이상합니다.
    1. 전역변수를 선언하지않았습니다. 제가 드린 답을 다시 보세요.
    var div = null; // 여기가 전역변수 선언
    function init(){
    div = document.getElementById("a"); // 전역변수에 객체 a의 주소 저장
    realTime(div);
    }
    function realTime(obj){
    var date = new Date();
    obj.innerHTML = date.toLocaleTimeString();
    window.setTimeout("realTime(div)", 1000); // 전역 변수 div 가 가리키는 객체를 realTime() 에 전달
    }

     

    콘솔창에 "Uncaught ReferenceError: div is not defined" 이오류가 나오는 이유는 

    앞의 코드와 같이 div를 전역변수로 선언하지 않아서 그렇습니다.

     

  • ?
    열심히 공부하는 독자 2020.08.30 01:07
    저자님과 같이 저도 var div; 를 함수밖에 선언하고 문제를 풀었습니다. 그런데,
    홈페이지에 올려놓으신 답과 비교하기위해 답을 보았더니
    답에서는 전역변수로 선언하지 않았습니다.

    그래서, 앞서 배운것과 충돌이 나서 id값과 변수값을 변경해보며 이상하다고 느껴서 질문을 드렸습니다.
    https://ancandy.github.io/web1/prac10-05.html << 이것이 홈페이지 답입니다.

    결과적으로, 답에서 <div id="clock>과 var clock이 선언되었고,
    전역변수가 없음에도 실행되었던것은 위에 저자님께서 답변주신 2번이 원인이었던거 같습니다.

QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18277
223 HTML을 열심히 공부중인 학생입니다 3 열심히 하자 2018.05.30 1962
222 Image 객체 2 초보 2020.05.14 126
221 Image객체 질문 4 열심히 공부하는 독자 2020.08.21 79
220 length 프로퍼티 2 열공이 2022.05.21 59
219 list type 질문이요 2 file 021 2020.05.03 107
218 localhost 관련 문의 3 소년정 2018.02.20 4036
217 open 10장 1 sigwq 2018.11.27 448
216 open 8 질문 2 열심히 공부하는 독자 2020.08.15 62
215 open challenge 05 2 hardworking 2017.03.29 2224
214 open challenge 6장 1 aoharu 2018.09.15 622
213 Open Challenge 와 실습문제 자료 2 김원상 2017.04.29 7446
212 open challenge 코드 11 hardworking 2017.03.27 1106
211 open challenge10 관련 질문드립니다 1 궁금해용 2018.05.16 368
210 open12 질문드립니다. 3 열심히 공부하는 독자 2020.09.08 111
209 p.133 질문이요 1 컴퓨터공학생 2020.08.30 67
208 p.133 질문이요 1 컴퓨터공학생 2020.08.30 74
207 p.254 3번문제 질문드립니다. 2 열심히 공부하는 독자 2020.08.14 48
206 p.296 isNaN 함수 1 yamto 2020.12.28 180
205 p.469 6번 질문드립니다. 4 열심히 공부하는 독자 2020.09.08 64
» p.469 실습 5번문제 4 열심히 공부하는 독자 2020.08.29 92
목록
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 21 Next
/ 21
위로