JavaScript setInterval立即运行

时间:2015-09-23 10:54:11

标签: javascript loops setinterval intervals

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

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();

我试图返回Banner方法,命名并返回,但没有成功。 要点是在实际构造中要复杂得多,所以我不能将其重写为"返回setTimeout"解决方案,广泛提供,所以找到我错误的解决方案真的很完美。

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

5 个答案:

答案 0 :(得分:4)

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

(function () {
    window.Banner = {

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

Banner.doMagic();

效果与您的第一个代码相同,但这样您的代码就更清晰了。

答案 1 :(得分:3)

您不再在第二个代码段中自行执行该功能。您需要将其更改为以下内容:

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);
}

答案 2 :(得分:1)

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



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




答案 3 :(得分:1)

如果将括号添加到下面的代码部分,则

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

答案 4 :(得分:1)

试试这个例子



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