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



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

有人能为我提供一些如何实现这一目标的见解吗?

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

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

也许是这样的:

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

否则,您将安排pickQuote的结果每x毫秒调用一次。

最新更新