迭代 - 解释和例子

时间:2011-08-25 03:40:02

标签: javascript terminology

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

来源:道格拉斯克罗克福德的Long running tasks YUI博客

1 个答案:

答案 0 :(得分:32)

最初,我认为这只是迭代的错字,因为在线搜索 eteration 不会产生重大结果。

但是,然后,我遇到了references,声称这个词是由克罗克福德本人在他的一次谈话中创造的。
在线,我可以找到解释的唯一地方是The Factorial Tutorial页面上的一篇文章,在 Act 2 中,作为对代码示例的评论,他声明:< / p>

  

法案2a:消息迭代(eteration)

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

  

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

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

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

如果Javascript的背景,Crockford在谈话Crockford on JavaScript -- Scene 6: Loopage中解释术语 eteration ,从分钟 30:40开始

  

迭代意味着将任务分成多个转弯,以便在每个转弯上   在底部进行迭代,而不是通过传统的循环   我们称之为setTimeOut的循环,传递一个导致它的函数   我们要做下一个迭代。这意味着转弯将是   简短 - 转弯只有一次转换 - 我们可以这样做   我们想要的很多事情,而不是锁定事件循环。

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

以更好的质量查看完整的演讲,并附上全文成绩单here

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

<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>

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