我正在尝试制作一个插件。在这个插件中,我有两个变量; rateMin和rateMax。我想在这两个数字之间生成一个随机数,并将其用作setInterval时间。然后,一旦使用该号码,请创建另一个随机数并使用它。
这是一个简单的例子:
var defaults = {
rateMin: 500,
rateMax: 2000
}
var options = $.extend(defaults, options);
return this.each(function(defaults){
var rate = Math.floor(Math.random() * (options.rateMax - options.rateMin + 1)) + options.rateMin; // MAKE A RANDOM NUMBER BETWEEN MAX AND MIN
setInterval(function(){
var rate = Math.floor(Math.random() * (options.rateMax - options.rateMin + 1)) + options.rateMin
//DO SOMETHING
}, rate);
我希望这样做,速率会用新数字覆盖自己,并在下次调用setInterval时使用。但它仍然只使用setInterval之前的第一个数字。
我想我不知道如何在它的功能之外使用变量。
有什么建议吗?
答案 0 :(得分:4)
如果您不希望每次延迟都相同,请使用setTimeout
代替setInterval
。另外,如果要覆盖外部作用域中的变量,请不要在回调中使用var rate
。也就是说,我只是将这段逻辑封装在函数中而忘记它。
function getNextRate() {
return Math.floor(Math.random() * (options.rateMax - options.rateMin + 1)) + options.rateMin;
}
setTimeout(function foo(){
//DO SOMETHING
setTimeout(foo, getNextRate());
}, getNextRate());