使用setInterval和随机数生成时遇到问题

时间:2012-02-08 10:43:33

标签: javascript jquery

我正在尝试创建一个随机引用生成器。我创建了一个名为timer的函数,每400ms运行另一个函数pickQuote,但目前这似乎不起作用。在pickQuote中我运行一个函数randomNumberGen,它创建一个随机数。我在randomNumberGen中的问题是我想要一个if或if..else来检查新的随机数是否与当前的引号[randomNumber]不同,但我不确定如何做到这一点。

任何人都可以向我提供一些有关如何实现这一目标的见解吗?

我目前的工作可以在这里查看:http://jsbin.com/aqinud/12/edit

2 个答案:

答案 0 :(得分:3)

index未在$.each之外定义。如果使用var,则无法在函数外部访问函数中的变量。

我建议改变功能如下:

function randomNumberGen() {

  //generate randomNumber based on length of array
  // round it down (parseInt is for string->number conversion)
  var thisRandomNumber = Math.floor(Math.random() * len);

  if ( randomNumber === thisRandomNumber ) {
    randomNumberGen();
  } else {
    randomNumber = thisRandomNumber;
  }

}

因此,首先创建一个随机数,只有当它与randomNumber不同时,才能使用新创建的随机数进行更新。否则,请再试一次。

另外,setTimeout需要一个函数,所以不要调用它:

runQuotePicker = setInterval(pickQuote, 400);

http://jsbin.com/aqinud/13/edit

答案 1 :(得分:3)

也许是这样的:

var currentNumber = -1;
function randomNumberGen() {
  var num = parseInt(Math.random() * (len) );
  if(currentNumber != num){
    currentNumber = num;
    return num;
  } else {
    return randomNumberGen();
  }
}

我注意到你错误地将'pickQuote'传递给了setInterval。尝试在匿名函数中包装回调:

function timer() {
  runQuotePicker = setInterval(function(){
    pickQuote();
  }, 1000);
}

否则,您计划在x毫秒内调用pickQuote的结果