迭代 - 解释和例子

Bak*_*dan 18 javascript terminology

有人可以解释一下Eteration究竟是什么并展示一个例子吗?

来源:道格拉斯克罗克福德的长期任务 YUI博客

luv*_*ere 32

最初,我认为这只是一个错误的迭代,因为在线搜索迭代不会产生显着的结果.

但是,然后,我发现了一些参考文献,说明这个词是由克罗克福德本人在他的一次会谈中创造的.
在线,我可以找到解释的唯一地方是他的页面,在因子教程中,这篇文章在第二幕中作为对代码示例的评论,他说:

第2a步:消息迭代(eteration)

这似乎是一对相关术语的一部分,因为他的下一个代码示例在不使用堆栈的情况下执行递归,包含该对的另一个成员:

动作2b:消息递归(ecursion)

因此,似乎迭代偏移是由Crockford自己发明和定义的术语,用于在E编程语言的上下文中引用消息迭代和递归,该编程语言是为编写分布式应用程序的开发人员在Java之上设计的.

语言被称为E的事实可能是给出其特定迭代和递归风格所选术语的理由(**e*teration*和**e***cursion*).

如果Javascript的上下文,Crockford解释术语eteration作为谈论Crockford在JavaScript上的一部分 - 场景6:Loopage,从30:40开始:

迭代意味着将任务分成多个循环,以便在每次迭代时,而不是通过常规循环,在循环的底部我们调用setTimeOut,传递一个函数,使我们进行下一次迭代.这意味着转弯将会很短 - 转弯只有一次转换 - 而且我们可以做任意多次的迭代,而不是锁定事件循环.

结果是,如果花费太长时间而不是紧密循环阻塞接口,则迭代会调度循环的每个步骤,在链中仅在实际步骤执行时阻塞接口,而不是在步骤之间.这使得可以在与接口相同的线程中执行长时间运行的任务(Javascript是单线程的),同时保持应用程序响应性.

退房充分谈话中更好的质量,并伴有全文转录这里.

另外,有关如何实现此类技术的参考,请考虑以下情形:

<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>
Run Code Online (Sandbox Code Playgroud)

有两个divs,一个显示正在进行的迭代的索引,另一个附加文本接口仍然响应!在每个试用我按钮按下.从代码中可以看出,迭代步骤按setTimeout一定的时间间隔进行调度,允许用户交互发生并进行处理.因此,当用户点击按钮并触发第二个div的更新时,迭代步骤将继续运行,保持页面的响应性,同时在其必须执行的工作(在这种情况下,仅显示索引)中实现真正的进展.