메뉴 건너뛰기

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 18281
402 span과 text-align : center; 에 관한 문제입니다. file 2019.10.15 279646
401 11장 6번 으엉 2019.11.27 187652
400 placeholder속성 1 khl 2017.04.08 85731
399 11장 6번 1 mj 2018.11.29 67569
398 실습문제 8-2 (3) 13412 2018.11.08 15730
397 웹 프로그래밍 책 답안지 1 mumu 2017.03.06 14076
396 살다 살다 답을 반쪽만 주는 책은 처음입니다 1 음음 2019.01.24 8848
395 Open Challenge 와 실습문제 자료 2 김원상 2017.04.29 7446
394 14장 예제 사라진 건가요 1 ... 2021.03.09 4078
393 localhost 관련 문의 3 소년정 2018.02.20 4039
392 페이지 247 에 있는 Open Challenge 05 의 CSS3로 태그 배치하기를 공부하고 있는데 질문드립니다. 1 file 워니고 2018.03.28 3878
391 ㅠㅠ..질문좀 드리겠습니다.. 1 은성 2017.04.18 3835
390 연습문제 답안지 2 vdncnck 2017.03.28 3265
389 짝수번 정답 3 idididid 2017.12.24 3135
388 8장 연습문제 실습문제 4장 2 student 2017.05.08 2872
387 10장 오픈챌린지 5 은성 2017.04.07 2247
386 open challenge 05 2 hardworking 2017.03.29 2224
385 5장 연습문제 홀수 번 질문 1 채XX 2019.06.17 1997
384 HTML을 열심히 공부중인 학생입니다 3 열심히 하자 2018.05.30 1962
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로