我正在尝试创建一个随机报价生成器。我创建了一个名为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毫秒调用一次。