>  기사  >  웹 프론트엔드  >  Javascript의 setTimeout() 클로저 기능을 사용할 때 주의해야 할 사항

Javascript의 setTimeout() 클로저 기능을 사용할 때 주의해야 할 사항

高洛峰
高洛峰원래의
2017-02-08 16:06:39977검색

이 글에서는 Javascript의 setTimeout(0) 클로저 기능을 사용할 때 주의해야 할 사항을 주로 소개합니다. 필요한 친구들이 참고할 수 있습니다.

setTimeout은 실행을 지연시키기 위해 자주 사용됩니다. 특정 함수의 사용법은 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

setTimeout(function(){
…
}, timeout);

때때로 setTimeout(function... ,0)은 비동기 처리에 사용됩니다. 예:

코드 복사 코드는 다음과 같습니다.

function f(){
… // get ready
setTimeout(function(){
…. // do something
}, 0);
  
return …;
}

함수 프로세서 설정 전 setTimeout에 의해 f 함수는

비동기 처리를 사용할 때, 특히 클로저 기능을 사용할 때 주의해야 합니다.

예:

복사 code 코드는 다음과 같습니다.

for(var i = 0 ; i < 10; i++){
setTimeout(function(){
console.log(i);
}, 0);
}

이 방법을 처음 사용하는 학생들의 경우 프로그램이 0...9를 인쇄할 것이라고 생각할 수 있지만 결과는 실제로 10 10s를 인쇄합니다.
문제는 루프가 완료되고 함수가 실행되고 i가 10이 되면 console.log(i)에 사용된 값이 10이라는 것입니다!

목적이 0...9를 인쇄하는 것이라면 방법을 변경하고 함수 매개변수를 사용하여 0...9를 저장할 수 있습니다(실제로 클로저도 사용됩니다):

코드 복사 코드는 다음과 같습니다.

for(var i = 0 ; i < 10; i++){
setTimeout((function(i){
return function(){
console.log(i);
}
})(i), 0);
}

자바스크립트의 setTimeout() 클로저 기능을 사용할 때 주의해야 할 또 다른 사항은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.