inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코어 자바스크립트

코어 자바스크립트 질문입니다!

해결된 질문

302

boutime2017

작성한 질문수 16

0

코어 자바스크립트 138~139페이지 질문입니다(이미지가 두 개 동시에 안 올라가네요 ㅠ)

debounce함수는 콜백으로써 호출되는 함수이지만, addEventListener에 의해 debounce함수 내의 this는 document.body가 되는 것으로 알고 있습니다.

그렇다면 mousemove혹은 mousewheel이벤트가 발생했을 때, debounce함수가 내뱉은 익명함수가 실행될 것이고,

여기에서 self에 할당한 this는 document.body가 되는 것이죠...?

그런데 이 self를 왜 func에 bind해주어야 하는지 잘 이해가 되지 않습니다 ㅠ

인자로 받는 func는 moveHandler나 wheelHandler함수인데, 이 두 함수의 경우 console.log만을 수행할 뿐, this에 접근할 일이 없는데 왜 bind 작업이 필요한 건가요...?

javascript

답변 1

1

정재남

책의 예제상에서는 this에 접근하지 않았지만, 일반적으로는 이벤트 핸들러에서 this를 사용할 경우가 많은데,
그 경우에 원래의 addEventListener의 콜백함수에 부여되는 this를 그대로 바라볼 수 있도록 해준 것입니다.

moveHandler 함수 내부에서 this를 출력해보시고, 아래(this 바인딩을 제거한 버전)과 비교해 보시기 바랍니다.

var debounce = function (eventName, func, wait) {
    var timeoutId = null;
    return function (event) {
        console.log(eventName, 'event 발생');
        clearTimeout(timeoutId);
        timeoutId = setTimeout(func, wait);
    };
};

var moveHandler = function (e) {
    console.log('move event 처리');
    console.dir(this);
}
document.body.addEventListener('mousemove', debounce('move', moveHandler, 500));

인스턴스에서 prototype 프로퍼티에 직접 접근해야하는 이유

0

59

1

setTimeout 에서 this

0

81

1

2강부터 영상이 나오지 않습니다.

0

175

1

자바스크립트 주석에 이상한 점이 있어서 문의드립니다.

0

219

2

return 문 안에 여러 함수가 존재하는 것이 이해되지 않습니다.

1

259

1

클래스 static 멤버

1

253

1

실행컨텍스트와 스택프레임

2

567

1

프로토타입으로 상속할때 브릿지 사용 이유

0

320

1

호이스팅 관련 질문

1

335

1

책 66p. 예제 3-2 질문입니다.

0

356

1

강의 내용 10:58 캡슐화 질문입니다.

1

398

1

강의 내용 5:10 질문입니다.

1

422

2

전역 공간에서의 this

0

426

2

18:31 addEventListener의 this

1

480

1

outerEnvironmentReference 질문

1

372

1

실행 컨텍스트와 클로저에 대해 질문드립니다.

1

448

1

Object.prototype.constructor의 [[prototype]] ?

1

658

1

함수를 값으로 할당할 때

2

457

1

15:54 'ddd' 사라지는 오류?

4

375

1

프로토타입 getPrototypeOf(instance).constructor(n,a) 질문입니다.

1

404

1

기본형/가변형 질문입니당

0

333

0

선생님 그러면 섹션 0만 봐도 무방한가요!?

0

336

1

Hoisting과 environmentRecord에 관한 질문입니다.

1

292

1

안녕하세요, 데이터 변경 질문입니다.

0

329

1