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

home2 게시판 JavaScript, TS 게시판 '자바스크립트 es6신문법' 게시판이 안열려서 여기에

'자바스크립트 es6신문법' 게시판이 안열려서 여기에

3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #5566

    Ingyum Kim
    참가자

    '자바스크립트 es6신문법' 게시판이 안열려서 여기에 질문 올립니다..

    'this & arrow function 연습문제 해설- 9분'에서 질문입니다.
     

    eventlister안의 함수 안의, setTimeout함수안의 일반함수를 '다짜고짜 쓴 일반 함수'라고 표현하셨는데,

    1. setTimeout함수안의 일반함수는 콜백함수인가요?

    2. 콜백함수는 모두 '다짜고짜 쓴 일반함수' 이고, 그것은  강의 초반에 말씀하신 '일반함수 내부에서의 this:   전역객체 window '라고 이해하면 되는건가요??

    3. eventlister안의 함수 안의, setTimeout함수안의 일반함수로...여러번 거쳐서 들어간 함수인데,

    다른함수안에 코딩하지않은 일반함수의 this처럼 window를 가리킨다는게.. 딱 와닿지가 않아요.

    #5574

    codingapple
    키 마스터

    콜백함수를 쓰면 this가 전부 이렇게 변한다~라고 싸잡아서 이해할 순 없습니다. 콜백함수가 담긴 곳을 살펴봐야합니다.

    그리고 함수를 여러개 중첩해서 쓴다고 해도 최종적으로는 this와 가장 가까운 함수에 의해 this가 변한다고 생각하시면 됩니다.

     

     

    원리를 더 설명해드리자면

    극 일반화해서 쉽게 설명하자면 대충 쓴 일반함수, 그리고 그 함수의 콜백함수 안에서는 this의 의미가 window가 맞습니다.

    근데 더 정확한 설명은 내가 담겨있는 object가 this의 정확한 의미입니다.

     

    setTimeout은 뭐 어디다가 쩜찍어서 오브젝트1.setTimeout을 했다면 setTimeout 내의 function(){} 안에서의 this는 오브젝트1 로 설정됩니다.

    addEventListener도 마찬가지로 특정 오브젝트2.addEventListener 이렇게 썼다면 addEventListener 내의 function(){} 안에서의 this는 오브젝트2 로 설정됩니다.

     

     

    근데 setTimeout 은 어디 담겨있지 않기 때문에 오브젝트1.setTimeout 이렇게 쓰진 않죠?

    실은 어디 담겨있습니다. window라는 이상한 오브젝트 보관함이 있는데 거기 setTimeout이 미리 담겨있습니다.

    그짓말같다면 콘솔창에 window를 출력해서 까보시면 진짜 들어있긴 합니다. window = { setTimeout : 어쩌구, ... } 이렇게 되어있을겁니다.

    window는 변수보관통인데 변수강의에서 아마 설명할 예정이라 왜 그런지는 스킵합시다.

     

    아무튼 window에 보관되어있기 때문에 그래서 우리가 setTimeout() 이렇게 써도 컴퓨터는 window.setTimeout() 이렇게 해석합니다.

    그래서 안에서 this를 쓰시면 window가 나오는게 정확한 원리데스

    근데 "내가 setTimeout이 window에 박혀있는지 어찌압니까" 라는 점 때문에 대충 근본없는 함수 아무거나 그 안에서 this쓰면 this는 window라고 생각하면 되겠습니다.

     

     

    #5576

    Ingyum Kim
    참가자

    답변 감사합니다. ^^

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

About

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

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

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