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

home2 게시판 JavaScript, TS 게시판 선생님 호이스팅 질문있습니다.

선생님 호이스팅 질문있습니다.

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

    정중식
    참가자
    var canvas = document.getElementById('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = window.innerWidth - 100;
    canvas.height = window.innerHeight - 100;
    var dino = {
      x: 10,
      y: 200,
      width: 50,
      height: 50,
      draw() {
        ctx.fillStyle = 'green';
        ctx.fillRect(this.x, this.y, this.width, this.height);
      },
    };
    // 클래스로 만드는게 일반적임
    class Cactus {
      constructor() {
        this.x = 500;
        this.y = 200;
        this.width = 50;
        this.height = 50;
      }
      draw() {
        ctx.fillStyle = 'red';
        ctx.fillRect(this.x, this.y, this.width, this.height);
      }
    }
    var timer = 0;
    var cactusArray = [];
    var jumpTimer = 0;
    function 프레밍마다실행할거() {
      requestAnimationFrame(프레밍마다실행할거);
      timer++;
      ctx.clearRect(0, 0, canvas.width, canvas.height);
      if (timer % 120 === 0) {
        var cactus = new Cactus();
        cactusArray.push(cactus);
      }
      cactusArray.forEach((item, index, all) => {
        // x좌표가 0미만이면 제거
        if (item.x < 0) {
          all.splice(index, 1);
        }
        item.x--;
        item.draw();
      });
      if (jumping) {
        dino.y--;
        jumpTimer++;
      }
      if (!jumping) {
        dino.y++;
      }
      if (jumpTimer > 100) {
        jumping = false;
      }
      dino.draw();
    }
    프레밍마다실행할거();
    var jumping = false;
    document.addEventListener('keydown', function (e) {
      if (e.code === 'Space') {
        jumping = true;
      }
    });
    
    class로 게임만들기 2 코드중 일부인데요,
    굵은색으로 표시한 부분 질문있습니다.
    
    자바스크립트는 위에서부터 차례로 읽지만 예외로 호이스팅현상이라는게 있다고 배웠습니다.
    호이스팅 현상이란, 변수나 함수의 선언부분을 범위 맨 위로 강제로 끌고가서 해석해주는데, 이것을 호이스팅이라고 배웠는데유
    
    잠깐! 여기서 변수,함수의 선언은,
    변수의 선언 : var 이름; let 나이; const 성별;
    변수의 할당 : var 이름 = 'kim';
    함수의 선언 : function 함수 (){ ... }
    
    이라고 배웠습니다.
    
    그러면 위의 코드에서 var jumping= false는; 변수의 선언과 변수의 할당이 같이일어난거로써 var jumping; 이 변수가 먼저 올라가고, 값 할당
     jumping = false는 나중에 일어난거잖아유? 그렇기때문에 프레밍마다실행할거() 이 함수 안에서 jumping을 if문으로 조건을 걸 수 있는건가요?
    ㄱ그러니깐.. 프레밍마다실행할거()함수 안에서의 jumping은 아직까지는 true나 false도 아닌, 언디파인 혹은 null인거죠?
    
    호이스팅 덕분에 var jumping;이 맨위에서 먼저 선언된걸로 자바스크립트는 읽었으니까 프레임마다실행할거()함수 안에서 jumpiunb를 명시해줄수있는거죠?
    
    
    
    질문이 좀 글로작성하다보니까 난잡한거같은데 제 질문의 요지가 잘 전달되었을지 걱정스럽네요...
    #72524

    codingapple
    키 마스터
    호이스팅 덕분에 var jumping;이 맨위에서 먼저 선언된걸로 자바스크립트는 읽었으니까 
    프레임마다실행할거()함수 안에서 jumping를 명시해줄수있는거죠?
    - 맞는말입니다 
    var jumping = false;를 더 위에 적는게 좋을수도요 
    
    #72679

    정중식
    참가자
    감사합니다
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 호 / 개인정보관리자 : 박종흠