국비수업/수업정리

자바스크립트 / 10

밀김 2023. 4. 3. 10:06
728x90

 

 

 

 

 

 

 

 

 

- 동기 : 순서를 기다리면서 일처리가 되길 기다리는것

 

- 비동기 : 기다리지않고 먼저 처리되는것

 

- 작성순서가 곧 실행순서였는데 비동기를 쓰면 그 순서를 바꿀수 있다

 

- reponse.json( ) : 비동기 함수(패치)

 

- 동기형 함수: 그 함수가 리턴될때까지 다음라인이 실행되지 않음 

 

- 비동기형 함수: 비동기 함수는 옆으로 빠지고 다음라인이 실행되기 전에 먼저 실행된다

 

- 실행 시간이 오래 걸리는 애들은 비동기로 빼야한다

 

- setInterval : 정해진 시간마다 반복되어 출력되게 하는 함수.while문으로 보면 된다.이걸  멈추게 하는 방법은 clearInterval(셋인터벌변수명)을 쓰면 한번도 실행되지 않고 끝난다

        this.#tid = setInterval(()=>{
            console.log("ㅎㅇ");
        },1000);

        clearInterval(this.#tid);

 

 

- 동시성의 문제 : 순서가 없어서 생기는 문제 

 

- 플랫폼마다 비동기의 방식은 다르지만 개념은 같기때문에 굳이 구분지어 생각할필요 없다

 

- 1초마다 계속 그려지는 사각형을 만들수 있다

        this.#tid = setInterval(()=>{
            this.#box.x+=10;
            this.#box.y+=10;
            this.paint();
        },1000);

 

 

 

- on~ : 사용자가 입력해주면 그것을 감지해, 작동되는 함수 (onclick,onmouseover....)

 

       // this.#obj.onclick = clickHandler; //함수가 대입(=함수를 위임한다.)
        this.#obj.onclick = this.clickHandler.bind(this); //내가 원하는 this를 대입하기 위해선 bind를 써줘야 한다.clickHandler가 멤버함수라서 앞에 this를 붙여줘야 한다
        //bind는 clickHandler 내부에 있는 this를 의미한다
        // this.#obj.onclick = clickHandler(); //함수의 return값이 대입된다
        //clickHandler가 정의되지 않았다는 오류가 뜸
            
    }

    clickHandler(e){ //clickHandler는 멤버 함수
        this.#box.x = e.x; //this가 다른 this로 인식된다
        this.#box.y = e.y;
    }

 

 

- 그림은 프레임에 맞춰서 그려지도록 해야한다

 

 

 


 

 

 

- append : 자식으로 추가..

        this.#obj = document.createElement("canvas");
        document.body.append(this.#obj);
        //body의 자식으로 obj를 넣어서 body에 canvas가 그려지게 되는것??
        //이렇게 하면 html에서 canvas를 그리지 않아도 자스자체에서 그릴수 있다

 

        this.background = document.createElement("img");
        this.background.src = "img/map.png";
        //이미지 추가 방법
        
	this.#ctx.drawImage(this.background, 100,100); //100,100 위치값
        //요 태그까지 paint함수쪽에 넣으면 이미지가 그려진다

 

 

 clickHandler(e){ 
        this.#box.vx = (e.x-this.#box.x)/15;
        //e.x는 마우스포인트가 있는 값-#box.x는 박스가 원래 갖고있던 위치값인데 이 둘을 빼주면 중간 길이가 나오고, 그걸 15로 잘게 쪼개면 움직이게 된다
        this.#box.vy = (e.y-this.#box.y)/15;
        //원거리는 더 잘게 쪼개고 근거리는 더 듬성듬성 쪼개야 등거리로 간다

    }

 

 

clickHandler(e){ //clickHandler는 멤버 함수
        let w = e.x-this.#box.x;
        let h = e.y-this.#box.y;
        let d = Math.sqrt(w*w+h*h);
        //Math.sqrt함수는 숫자의 제곱근을 반환해준다
        
        this.#box.vx = w/d;
        this.#box.vy = h/d;
        //등속도 구하기 식
    }

 

 

 

 

 

    moveTo(x,y){
        let w = x-this.#x; 
        // w 변수는 마우스 클릭 이벤트가 발생한 위치와 현재 객체의 박스의 x 좌표 사이의 거리를 나타냅니다.
        let h = y-this.#y; 
        // h 변수는 마우스 클릭 이벤트가 발생한 위치와 현재 객체의 박스의 y 좌표 사이의 거리를 나타냅니다.
        let d = Math.sqrt(w*w+h*h); 
        // d 변수는 w와 h의 제곱합의 제곱근을 나타냅니다. 이 값은 마우스 클릭 이벤트가 발생한 위치와 현재 객체의 박스와의 거리를 나타냅니다.
        this.#vx = w/d;
        this.#vy = h/d;
    }

 

 

 

 


 

 

 

 

 

✏️ 동기Synchronous란?

: 순서를 지켜서 처리되는것

 

✏️ 비동기Asynchronous란?

: 순서 지키지 않고 먼저 처리되는것

 

 

 

 

 

 

 

728x90