1

我正在尝试制作一个插件。在这个插件中,我有两个变量;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 之前生成的第一个数字。

我想我不知道如何在它的函数之外使用一个变量。

有什么建议么?

4

1 回答 1

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());
于 2013-03-20T17:53:48.117 回答