메뉴 건너뛰기

조회 수 154 댓글 2

var commentDiv;

function init() {
    commentDiv = document.getElementById("commentDiv");    
.....
이부분에서 변수선언과 초기화를 따로따로해주셧는대 

그냥 function init()영역 바깥이나 안에 선언과 초기화를 한번에 해주면 제대로 작동이 안되던대 이유가 뭔가요?
예를 들어 
var commentDiv = document.getElementById("commentDiv"); 
function init() {
....
이런식이나
function init() {
var commentDiv = document.getElementById("commentDiv"); 
...
이런식으로요
저렇게 초기화와 선언을 한번에 해주니깐 마우스를 올리고 내렸을때 작동이  안되는대 이유가 궁금합니다.
 

?
  • ?
    관리자3 2019.08.25 14:21

    이상하게 이 질문에 답을 올리면 잘 올라가지 않는데 원인을 아직 잡지 못했습니다. 그래서 궁여지책으로 아래와 같이 답을 드립니다.

     

    -----------------------------------

    변수의 종류에 대해 정확한 공부가 안되어 있어서 지금 어려워 하는 겁니다.(책 268페이지 참고)

    1.함수안에 선언한 변수를 지역 변수라고하고, 이 변수는 함수 밖에서 액세스할수 없어요.
    우선 질문자의 첫 번째 세 줄과 같이한 것이 바로 commenDiv 변수를 지역 변수 로 선언합니다.

    지역 변수는 함수가 끝나면 사라집니다. 그러니까 init()이 불러질 때 생겻다가 init() 끝남과 동시에 사라집니다.

    2. 함수 바깥에 선언된 변수가 전역 변수이니다. 질문자의 두 번째 소스 코드와  같이 하면 전역 변수 commentDIv를 선언합니다.

    전역변수는 한 번 만들어지면 어디서든 사용되고 브라우저가 닫힐 때까지 없어지지 않아요.
    다만 앞의 코드는  init()이 불려지기 전에 그러니까 HTML 페이지가 로딩되고 있는 상태에서
    이 코드(var commentDiv = document.getElementById("commentDiv"); )를 만날 때 바로 실행되고 전역변수가 생깁니다.
    문제는 여기에 있습니다. 이 라인이 실행되는 시점에서 document 객체가 완성되어 있지 않고, id=commentDiv 인 태그가 처리되지 않은 상태라면
    이문장에서(document.getElementById("commentDiv"); ) 오류가 납니다.
    그러니까 이 문장(document.getElementById("commentDiv"); )은 HTML 문서가 완전히 로딩된 후에 실행되어야 합니다.
    그래서 저의 정답은 질문자의 마지가 소스 방법과 같이 하지요

    글로 쓰니 매우 표현이 어렵군요,
     

  • ?
    관리자 2019.08.25 14:42
    변수의 종류에 대해 정확한 공부가 안되어 있어서 지금 어려워 하는 겁니다.(책 268페이지 참고)

    1. 함수안에 선언한 변수를 지역 변수라고하고, 이 변수는 함수 밖에서 액세스할수 없어요.
    우선 아래와 같이한 것이 바로 commenDiv 변수를 지역 변수 로 선언합니다.
    function init() {
    var cmtDiv = document.getElementById('cmtDiv')

    지역 변수는 함수가 끝나면 사라집니다. 그러니까 init()이 불러질 때 생겻다가 init() 끝남과 동시에 사라집니다.
    2. 함수 바깥에 선언된 변수가 전역 변수이니다. 다음과 같이 하면 전역 변수 cmtDIv를 선언합니다.
    var cmtDiv = document.getElementById('cmtDiv');
    function init() {

    전역변수는 한 번 만들어지면 어디서든 사용되고 브라우저가 닫힐 때까지 없어지지 않아요.
    다만 앞의 코드는 init()이 불려지기 전에 그러니까 HTML 페이지가 로딩되고 있는 상태에서
    이 코드(var cmtDiv = document.getElementById('cmtDiv'); )를 만날 때 바로 실행되고 전역변수가 생깁니다.
    문제는 여기에 있습니다. 이 라인이 실행되는 시점에서 document 객체가 완성되어 있지 않고, id=cmtDiv 인 태그가 처리되지 않은 상태라면
    이문장에서(document.getElementById('cmtDiv'); ) 오류가 납니다.
    그러니까 이 문장(document.getElementById('cmtDiv'); )은 HTML 문서가 완전히 로딩된 후에 실행되어야 합니다.
    그래서 저의 정답은 다음과 같이 하지요
    var cmtDiv;

    function init() {
    cmtDiv = document.getElementById('cmtDiv')

    전역변수만 선언해두고
    HTML 문서가 로딩된 후 호출되는 init() 함수 에서 이문장( cmtDiv = document.getElementById('cmtDiv'); )을 실행하는 겁니다.
    글로 쓰니 매우 표현이 어렵군요,

QnA

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

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18281
303 연습문제 8장 이론문제 2번 답을 알고 싶습니다. 1 khe 2017.08.18 814
302 연습문제 5장 10번 문제 질문드립니다. 1 . 2020.10.08 247
301 연습문제 4장 8번문제 1 file 도라에몽 2020.10.02 263
300 연습문제 3장 p.155 5번 문제 1 열심히해보자 2020.10.07 420
299 연습문제 3장 5번 문제 1 seungjun 2023.10.26 129
298 연습문제 3장 2번 질문합니다! 1 file KHE 2022.09.08 152
297 안녕하세요? 186쪽 예제 4-13 대해서 물어봅니다. 1 file 김현우 2020.11.02 125
296 안녕하세요. 몽구스 다른 컴퓨터에서 서버 접속 문의 드립니다. 1 file 2018.03.14 225
295 안녕하세요 처음하는 사람입니다 교재 구입하였습니다 2 성현군 2017.06.29 330
294 안녕하세요 질문드립니다! 2 Hola 2018.10.17 418
293 안녕하세요 관리자님 실습 문제 짝수본 zip 파일은 제공 되지 않는 건가요? 1 문의 2022.02.25 210
292 실제로 사용해봤습니다 ! ㅠㅠ 1 갱자데쓰 2018.02.06 120
291 실습문제답도 제공이 안되는 건가요? 2 아침이 2019.01.07 311
290 실습문제 홀수번 정답 ㅁㅁ 2017.09.24 635
289 실습문제 짝수번 이미지들은 다운할 수 없나요? 공부하면성공한다 2018.10.02 366
288 실습문제 9-8번 질문 있습니다. 2 muuum 2018.10.24 326
287 실습문제 9-7번 답안지를 보고 질문있습니다. 2 muuum 2018.10.23 300
286 실습문제 9-6번 문제중에 5% 증가는 어떻게 해야하나요? 2 muuum 2018.10.24 150
285 실습문제 8장 3번 문제 질문입니다. 2 Joahgng 2018.12.06 261
284 실습문제 8-2 (3) 13412 2018.11.08 15696
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로