• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 JavaScript, TS 게시판 변수 질문입니다.

변수 질문입니다.

  • 이 주제에는 4개 답변, 2명 참여가 있으며 Parker4 년, 4 월 전에 전에 마지막으로 업데이트했습니다.
5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 글쓴이
  • #6330

    Parker
    참가자

    for (var i = 0; i < 5; i++) { setTimeout(function() { console.log(i); }, i*1000 ); }

    위 예제에서  var 를 사용한 i가 전역으로 5가되어서 5만 찍히는 거고 let으로 바꾸면 해결된다고 설명해 주셨는데..

    그런데 var 사용시에 왜5초마다 5가찍히는 것이 아니라  1초마다 5가 찍히나요?   

    #6332

    codingapple
    키 마스터

    settimeout, addeventlistener 같은 함수들은 web api라는 임시보관함을 거치는 특이한 함수들입니다

    브라우저는 settimeout을 만나자마자

    1. web api라는 공간에 settimeout내부의 콜백함수를 잠깐 보관하고 

    2. 그 콜백함수가 실행할때가 되면 실행하라고 내보내줍니다

     

    그래서 위의 코드를 컴퓨터입장에서 해석해보면 

    - 반복문으로 내부 코드를 5번 복붙하기 시작합니다 

    - settimeout을 만났기 때문에 걔를 web api로 보냅니다. 이걸 x5번합니다.

    - 반복문이 끝납니다. 여기서 var i는 이미 5가 되어있습니다.

    - 1초가 흐릅니다. 1초가 지나면 web api 안에 보관되었던 settimeout 함수 내부 console.log(i) 가 동작합니다. 

    - console.log를 실행하려고 봤더니 근처에 i는 var i 밖에 없고 그건 5입니다. 그래서 5를 출력해줍니다.

    - 2초가 흐르고 또 settimeout내부 코드를 실행해주는데 위와 같습니다

    - 3초가 흐르고 .. 역시 위와 같습니다

     

     

    #6333

    Parker
    참가자

    답변 감사드립니다. 그런데 아직도 조금 이해가 잘 안되는데요... 

     { setTimeout(function() { console.log(i); }, i*1000 ); }

    var i 가 이미 5가 되어있으면 console.log(i)도 5가되고, i*1000의 i도 5인데 그러면 5초마다 반복실행이 되는것 같은데 i*1000은 왜 정상적으로 반복문 0*1000, 1*1000, 2*1000, 3*1000... 으로 되는 건가요? 참조하는 변수 i가 5라면 5초마다 반복되는 것으로 되어야 할텐데.. 콜백함수의 i만 5가되고, 두번째 파라미터 i*1000은 정상적으로 반복문의 i를 순서대로 참조 한다고 이해하면 될까요? web api라는 공간에는 콜백함수만 보내지는 거고, i*1000은 보내지지 않는 것으로 이해하면 되나요?    

    #6335

    codingapple
    키 마스터

    i*1000은 web api로 보내지 않습니다. 그래서 i*1000은 반복문이랑 함께 실행되므로 0~4값이 잘 할당됩니다. 

    function() { console.log(i) } 여기 부분만 web api로 보냅니다

     

     

    #6339

    Parker
    참가자

    감사합니다. 이해 했습니다~

5 글 보임 - 1 에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠