JavaScript 立即设置间隔 运行

JavaScript setInterval immediately run

我立即在 javascript 中找到了 运行 间隔的解决方案,而不是等待第一个 "timeout"

setInterval(function hello() {
  console.log('world');
  return hello;
}(), 2500);

但问题是这个解决方案在这样的构造中不起作用

(function () {
    window.Banner = {

        doMagic: function () {
            setInterval(function magic() {
                console.log('magic');
                return magic;
            }, 2500);
        }
    }
})();

Banner.doMagic();

我试过 return 横幅方法,给它命名并 return 但没有成功。 重点是实际构造要复杂得多,所以我不能只是将它重写为广泛提供的 "return setTimeout" 解决方案,所以找到我在这个问题上做错了什么真的很完美。

http://jsfiddle.net/5jawxLnr/3/

在您的代码中无法执行所需的任务,而是遵循以下方法:

// Use function to perform the task.
function doTask () {
 console.log("...");
}
// Perform task for the first time.
doTask();
// On interval do task.
setInterval(doTask, 2500);

也许最合适的方法是将整个回调放在 setInterval 调用之外,并将其放在一个单独的变量中:

(function () {
    window.Banner = {

        doMagic: function () {
            var magic = function() {
                console.log('magic');
            };
            setInterval(magic, 2500);
            magic();
        }
    }
})();

Banner.doMagic();

效果和你的第一个代码是一样的,但是这样你的代码更干净一些。

您不再自动执行第二个代码片段中的函数。您需要将其更改为以下内容:

doMagic: function () {
   setInterval(function magic() {
      console.log('magic');
      return magic;
   }(), 2500);
}

虽然我同意其他人的意见,但这不是最简洁的方法,而且对于下一个出现的开发人员来说不是很明显。我建议将函数存储在一个变量中,立即执行它,然后 运行 它在 setInterval 也:

doMagic: function () {
   var magic = function magic() {
      console.log('magic');
      return magic;
   }
   magic();
   setInterval(magic, 2500);
}

如果您将括号添加到下面的代码部分,它会起作用

    doMagic: function () {
        setInterval(function magic() {
            console.log('magic');
            return magic;
        }(), 2500);                   // added them here
    }

试试这个例子

var hello = function() {
  document.write('hello... ');
};
setInterval(hello, 1000);
hello();