【问题标题】:Output of one sample program of javascript is giving wrong answer一个 javascript 示例程序的输出给出了错误的答案
【发布时间】:2014-01-07 22:10:32
【问题描述】:

我正在阅读一本名为“Pedro Teixiera”的名为“Hands on node.js”的书。

我试图执行该书中给出的一个相同的程序,该程序将调用一个函数,并且该函数在某个时间间隔内一次又一次地递归调用相同的函数。 但是当我执行时,它只给出一次'1'并停止 请帮我弄清楚为什么它不能再次调用相同的函数。 示例程序如下:

var schedule = function(timeout, callbackfunction) {
    return {
        start: function() {
        setTimeout(callbackfunction, timeout)
        }
    };
};

(function() 
{
    var timeout = 10000; // 1 second
    var count = 0;
    schedule(timeout, function doStuff() {
        console.log(++ count);
        schedule(timeout, doStuff);
    }).start(timeout);
})();

【问题讨论】:

  • 仅供参考 10000 毫秒是 10 秒。
  • 你还期望它做什么?
  • 我希望这个循环继续下去,因为没有 break 语句,如果我没记错的话。
  • 没有循环。为什么要有break语句?

标签: javascript recursion timeout


【解决方案1】:

一次又一次地间隔一段时间

不,您应该使用setInterval 而不是setTimeout

它只给出一次“1”并停止

是的,您的 doStuff 函数没有设置新的超时。你奇怪的schedule 函数需要.start()ed!

【讨论】:

    【解决方案2】:

    您实际上并没有再次调用该函数。 start() 是启动定时器的部分。

    schedule( timeout, function doStuff() {
        console.log( ++count );
        schedule( timeout, doStuff ).start();   // <--- added .start() here
    }).start();
    

    (还要注意start() 函数不带参数。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      相关资源
      最近更新 更多