> 웹 프론트엔드 > JS 튜토리얼 > 'setTimeout' 콜백에 컨텍스트를 올바르게 전달할 수 있는 방법은 무엇입니까?

'setTimeout' 콜백에 컨텍스트를 올바르게 전달할 수 있는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-25 22:25:23
원래의
293명이 탐색했습니다.

How Can I Correctly Pass Context to a `setTimeout` Callback?

setTimeout 콜백에 컨텍스트 전달

setTimeout 콜백에 올바른 컨텍스트를 전달하는 것은 어려울 수 있으며, 특히 객체 메서드로 작업할 때 더욱 그렇습니다. 처음에 콜백 내에서 이를 참조할 때 전역 개체가 사용되는 경우가 많습니다.

이 문제를 해결하려면 다음과 같은 몇 가지 접근 방식이 있습니다.

1. 참조 저장(ES5 이하):

var that = this;
if (this.options.destroyOnHide) {
     setTimeout(function() { that.tip.destroy() }, 1000);
}
로그인 후 복사

이 기술은 임시 변수(즉)를 사용하여 setTimeout이 호출되는 컨텍스트를 저장합니다.

2 . 바인딩 메서드(ES5 이상):

if (this.options.destroyOnHide) {
     setTimeout(function() { this.tip.destroy() }.bind(this), 1000);
}
로그인 후 복사

바인드 메서드는 미리 정의된 this 값을 사용하여 새 함수를 생성합니다. 이 경우 setTimeout을 호출하기 전에 객체에 설정됩니다.

3. 화살표 함수(ES6 이상):

if (this.options.destroyOnHide) {
     setTimeout(() => { this.tip.destroy() }, 1000);
}
로그인 후 복사

화살표 함수는 setTimeout을 호출하는 객체와 동일한 어휘 this 컨텍스트를 상속합니다. 이렇게 하면 묶거나 보관할 필요가 없습니다.

4. setTimeout에 인수 전달(HTML5):

if (this.options.destroyOnHide) {
     setTimeout(function(that) { that.tip.destroy() }, 1000, this);
}
로그인 후 복사

HTML5에서는 콜백에 추가 인수를 전달할 수 있는 기능을 setTimeout에 도입했습니다. 여기서는 인수로 전달되고 콜백 함수 내에서 액세스됩니다.

위 내용은 'setTimeout' 콜백에 컨텍스트를 올바르게 전달할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿