• 카테고리

    질문 & 답변
  • 세부 분야

    웹 개발

  • 해결 여부

    미해결

requestAnimationFrame 추가질문입니다.

21.08.04 18:24 작성 조회수 163

0

안녕하세요. 강의 잘 듣고있습니다.

다름이 아니라 이 회차의 질문들 보다가

[오류가 난 후에

requsetAnimationFrame(self.run(self)); 가 아니라 requsetAnimationFrame(function() {self.run(self)}; 으로 function 안에 self.run(self)를 쓰셨는데 둘의 차이점이 궁금합니다.]

이 질문에 

[requestAnimationFrame()의 괄호 안에는 함수 자체가 들어가야 합니다.

즉,
function foo() {

}

이런 함수가 있다고 가정하면,

requestAnimationFrame( foo() ); 가 아니라,
requestAnimationFrame( foo ); 가 되어야 하는 거죠~

foo()를 넣게되면, 함수 실행의 결과 값,
결국 foo 함수의 리턴값을 requestAnimationFrame의 인자로 넣어 호출하는 것이 되는 것이죠~

self.run(self)도 run 메서드를 호출하는 것이기때문에
requestAnimationFrame의 사용법에 맞지 않습니다^^
함수 자체를 넣으면서도 self라는 인자를 매개변수에 넣어야 하기에 익명 함수를 활용한 것이고요.]

라고 답변해주신것을 보았는데,

그렇다면 run 메서드에 bind를 사용하여 requestAnimationFrame에서 this값이 변경되는 문제를 해결할 때는 왜

self.rafId = requestAnimationFrame(self.run.bind(self));

가 되었는지 궁금합니다.

여기서도 함수 자체를 넣기 위해서는

requestAnimationFrame(function() {self.run.bind(self)})

일거 같은데 아니라서요

self.run.bind(self)는 함수를 호출하여 리턴한 값이 아닌 함수 자체를 나타내는 건가요?

답변 1

답변을 작성해보세요.

1

bind 함수 자체가 실행의 결과로 함수의 복제본을 리턴하기 때문이랍니다~
지정한 this를 사용해서 변경한 원래 함수의 복제본을 리턴해주어서, 결국 그 자리에 새로운 함수를 넣은 것이 됩니다.