메뉴 건너뛰기

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 18237
283 page 46 마우스 올릴시 이미지 출력 2 file 공부중 2020.09.10 323
282 p.469 6번 질문드립니다. 4 열심히 공부하는 독자 2020.09.08 64
281 open12 질문드립니다. 3 열심히 공부하는 독자 2020.09.08 111
280 value 속성 1 열심히 공부하는 독자 2020.09.04 48
279 오타제보합니다. 1 컴퓨터공학생 2020.08.30 96
278 p.133 질문이요 1 컴퓨터공학생 2020.08.30 74
277 p.133 질문이요 1 컴퓨터공학생 2020.08.30 67
» p.469 실습 5번문제 4 열심히 공부하는 독자 2020.08.29 92
275 브라우저 크기 변경 1 열심히 공부하는 독자 2020.08.27 59
274 9장 실습9번 문제 2 열심히 공부하는 독자 2020.08.23 106
273 Image객체 질문 4 열심히 공부하는 독자 2020.08.21 79
272 DOM트리 질문 1 열심히 공부하는 독자 2020.08.17 76
271 몽구스 웹서버가 뭔가요? 1 안녕하세요 2020.08.16 101
270 이벤트리스너 질문 2 열심히 공부하는 독자 2020.08.16 63
269 <script>태그의 위치 1 열심히 공부하는 독자 2020.08.15 58
268 open 8 질문 2 열심히 공부하는 독자 2020.08.15 62
267 p.254 3번문제 질문드립니다. 2 열심히 공부하는 독자 2020.08.14 48
266 예제 9-8 질문입니다. 2 모르겠어요 2020.07.31 101
265 예제 6-13 질문이요! 2 궁그미 2020.07.30 144
264 border style 질문 2 궁그미 2020.07.28 41
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 11 ... 21 Next
/ 21
위로