2011-08-25 3 views
18

어떤 사람이 정확히 수어을 설명 할 수 있습니까?반복 - 설명 및 예

소스

:

+0

나는 관련성이 높은 정보를 가지고 나의 답변을 편집했으며, ** 에터 레이션 **이 무엇인지, 그리고 자바 스크립트의 컨텍스트에서 어떻게 사용되는지를 정확히 설명했다. – luvieere

+0

관련 설명과 함께 코드 샘플을 추가했습니다. – luvieere

답변

32

처음 더글러스 크록 포드에 의해 Long running tasks YUI 블로그, 나는 그것이 eteration 온라인 검색으로, 반복 그냥 오타라고 생각은 유의 한 결과를 얻을 수 없습니다.

그러나 그때 나는 그의 말 중 하나에서 용어가 Crockford 자신에 의해 만들어 졌다고 쓰여진 references을 보았습니다.
온라인, 내가 설명을 찾을 수있는 유일한 장소는 코드 샘플에 대한 주석으로, 그는 미국, 법이의 경우 기사, The Factorial Tutorial에, 자신의 페이지에 :

법 (2A) :

: 메시지의 반복 (eteration)는

이 스택을 사용하지 않고 재귀 수행 그의 다음의 코드 샘플과 같은, 한 쌍의 다른 부재를 포함 용어 관련 쌍 일부로 보인다

법 2B : 메시지 재귀 (ecursion는)

그래서, eterationecursion가 나온 용어 E Programming Language의 맥락에서 메시지의 반복과 재귀를 참조 Crockford에 자신이 발명하고 정의 된 것 같다 분산 응용 프로그램을 작성하는 개발자를 위해 Java 위에 설계되었습니다.

언어가 E라고 있다는 사실은 아마도 그 특정 반복과 재귀 맛을 선택한 용어 (** 전자 *** teration * 및 ** 전자 *** cursion의 *)를 제공하는 이유입니다.

자바 스크립트의 내용은, 크록 포드는 용어 eteration분부터 이야기 Crockford on JavaScript -- Scene 6: Loopage의 일환으로 30:40 설명하는 경우 :

Eteration 그 때문에 다수의 회전으로 작업을 중단 할 뜻을 각각의 에터 레이션에서 종래의 루프를 거치지 않고 루프의 setTimeOut으로 전화를 걸어 다음 에터 레이션을 수행하는 함수를 전달합니다. 즉 턴은 으로 짧을 것입니다. 턴은 한 번의 에터 레이션만큼 길며, 우리는 원하는만큼 많은 수의 이터 레이션을 할 수 있습니다. 이벤트 루프를 잠글 수 없습니다.

결과는, 그 대신 타이트한 루프,이 체인에서, 루프의 각 단계를 eteration 스케줄을 너무 오래 걸리면 인터페이스 차단 만 블록 인터페이스는 실제 공정이 실행되는 동안 , 단계 사이 아닙니다. 따라서 응용 프로그램 응답을 유지하면서 인터페이스와 동일한 스레드에서 Javascript가 단일 스레드 인 장기 실행 태스크를 수행 할 수 있습니다.

훨씬 더 나은 품질의 전체 토론을 확인하고 전문 텍스트 here을 첨부하십시오.

또한, 이러한 기술이 구현 될 수있는 방법에 대한 참조를 들어, 다음 시나리오를 고려하십시오 두 div의, 지속적인 eteration의 인덱스를 표시하는 일이 있습니다

<html> 
<head> 
    <script type="text/javascript"> 
    function testFeedback() 
    { 
     var feedbackDiv = document.getElementById("feedbackDiv"); 

     feedbackDiv.innerHTML += "The Interface is Still Responsive!</br>"; 
    } 

    var currentNumber = 0; 
    var loopStepDelay = 30; 

    function performLoopStep() 
    { 
    var numbersDiv = document.getElementById("numbersDiv"); 
    numbersDiv.innerHTML = currentNumber++; 
    setTimeout("performLoopStep()", loopStepDelay); 
    } 
    setTimeout("performLoopStep()", loopStepDelay); 
    </script> 
</head> 
<body> 
    <div id="numbersDiv"></div> 
    </br> 
    </br> 
    <div id="feedbackDiv"></div> 
    </br> 
    </br> 
    <button onClick="testFeedback()">Try Me</button> 
<body> 
</html> 

, 다른 하나는 텍스트를 추가 인터페이스가 여전히 반응적입니다! 각시도해보십시오 버튼을 누르십시오. 코드에서 알 수 있듯이, 이터 레이션 단계는 일정 시간 간격을 두어 setTimeout만큼 일정하게 설정되어 사용자 상호 작용이 가능하도록 처리됩니다. 따라서 사용자가 버튼을 클릭하고 수행해야하는 작업 (이 경우 간단히 인덱스를 표시)에 대한 실제 진행을하면서 페이지의 응답을 유지하면서 두 번째 div의 업데이트를 트리거 할 때 반복 단계가 계속 실행됩니다.

+0

아마도이 용어는 JavaScript 및 Nodej의 컨텍스트에서 사용됩니다. E 또는 Java 없음. – Bakudan