使用多个变量重复javascript函数

时间:2016-10-10 11:51:43

标签: javascript

我不确定如何最好地解释我想要做的事情,所以我会把一个快速的例子放在一起。

假设我有一个像这样的JavaScript函数:

function myFunction(){
    doSomething('text string here');
}

我需要以指定的间隔重复此功能。我可以用setTimeout做到这一点。

但是,我需要使用的文本字符串不只是一个字符串,我有三个。所以我的功能看起来像这样:

function myFunction(){
    var stringOne = "My first string";
    var stringTwo = "My second string";
    var stringthree = "My third string";

    doSomething(*string variable name here*);
}

所以我需要调用该函数,让我们说每10秒,但每次运行它需要按顺序使用下一个文本字符串。

所以我需要打电话:

myFunction, and have it use stringOne.
myFunction, and have it use stringTwo.
myFunction, and have it use stringThree.
And then start back at the first one again.

我可以编写三个单独的函数,并使用setTimeout将它们组合在一个循环中,但似乎应该有更好的解决方案。

5 个答案:

答案 0 :(得分:8)

你可以使用一个闭包计数器。

function myFunction() {
    var counter = 0,
        fn = function () {
            var array = ["My first string", "My second string", "My third string"];
            console.log(array[counter]);
            counter++;
            counter %= array.length;
        };
        fn();
    return fn;
}
setInterval(myFunction(), 2000);

答案 1 :(得分:1)

只需使用全局变量来跟踪当前字符串:

currentString = 0;

然后在每次调用之后增加值并对其进行模数化:

function myFunction(){
    switch(currentString){
    //print the current string
    }

    currentString = (currentString + 1) % 3;
}

答案 2 :(得分:1)

function myFunction(strings){
  var ii = 0
  function iterate(){
    // increment or reset the iterator
    doSomething(strings[ii++ % strings.length])
    // call it again after 1 second (change this)
    setTimeout(iterate, 1000)
  }
  // kick off the iteration of your strings
  iterate()
}

function doSomething(val) {
  console.log(val)
}

// init the iterator with your strings
myFunction([
 'myFunction, and have it use stringOne.',
 'myFunction, and have it use stringTwo.',
 'myFunction, and have it use stringThree.'
])

答案 3 :(得分:0)

使用递增索引的递归函数



(function myFunction(i){
   var arr = ["My first string", "My second string", "My third string"];
   
   setTimeout(function() {
       doSomething( arr[i = i < arr.length ? i : 0] );
       myFunction(++i);
    }, 1000);
})(0);

function doSomething(str) {
    console.log(str)
}
&#13;
&#13;
&#13;

答案 4 :(得分:0)

无需关闭任何东西;没有提到,但我也添加了超时。就这样做;

var array = ["My first string", "My second string", "My third string"],
      sid;
function runner(i){
  console.log(array[i=i%array.length]); // i hate i growing indefinitely
  sid = setTimeout(_ => runner(++i),2000);
}

runner(0);
setTimeout(_ => clearTimeout(sid),20000);