>  기사  >  웹 프론트엔드  >  js는 비동기 루프 구현 code_javascript 기술을 구현합니다.

js는 비동기 루프 구현 code_javascript 기술을 구현합니다.

WBOY
WBOY원래의
2016-05-16 15:15:271283검색

질문
비동기 루프를 구현할 때 문제가 발생할 수 있습니다.

루프에서 루프의 인덱스 값을 한 번만 인쇄하는 비동기 메서드를 작성해 보겠습니다.

<script>
for(var i = 0; i < 5; i++){
setTimeout(function(){
document.writeln(i);document.writeln("<br />");
},1000);
}
</script>

위 프로그램의 출력은 다음과 같습니다.

5
5
5
5
5

이유

모든 타임아웃(timeout)은 복사본이 아닌 원본 i를 가리킵니다. 따라서 for 루프는 i를 5로 증가시킨 다음 timeout이 실행되고 i의 현재 값(5)을 호출합니다.

솔루션

i를 복사하는 방법에는 여러 가지가 있습니다. 가장 일반적이고 일반적으로 사용되는 방법은 함수를 선언하고 이 함수에 i를 전달하여 클로저를 생성하는 것입니다. 여기서는 자체 호출 기능을 사용합니다.

코드 실행

<script>
for(var i = 0; i < 5; i++){
(function(num){
setTimeout(function(){
document.writeln(num);document.writeln("<br />");
},1000);
})(i);
}
</script>

출력

0
1
2
3
4

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