使用带有计时器的随机数生成器在Javascript中每次都给出相同的数字

时间:2012-04-27 08:16:40

标签: javascript math random

我正在尝试使用javascript制作文本幻灯片,但是在javascript中,数学楼层函数始终返回相同的随机数。下面的代码有什么问题?

var randomnumber;
D=Array(7)
D[0]='Sunday!'
D[1]='Monday!'
D[2]='Tuesday!'
D[3]='Wednesday!'
D[4]='Thursday!'
D[5]='Friday!'
D[6]='Saturday!'

window.setTimeout("Tick()", 1000);    

function Tick() 
{
    document.write('<marquee><font size="+2">'+D[Math.floor(Math.random()*7)]+'</font></marquee>')    
}


</script>

1 个答案:

答案 0 :(得分:4)

Works fine。但是,在使用setTimeout而不是字符串时,必须传递对函数的引用。当您传递一个字符串时,setTimeout使用类似eval的过程,使这种使用方法不安全。

function Tick() {...}

//pass a reference (no quotes)
window.setTimeout(Tick, 1000);​

setTimeout仅在达到超时时触发一次。如果你想做一个恒定的,连续的Tick,那么最好再使用setInterval,然后再点火并“重新加载”。


这是符合您描述的a modified version of the code

//create the marquee and add to body 
var marquee = document.createElement('marquee');
document.body.appendChild(marquee);

function Tick() {
    //generate the random text
    var randomDay = D[Math.floor(Math.random() * 7)];

    //change the existing marquee text
    //textContent for compliant browsers
    //innerText for IE
    marquee.textContent = randomDay;
}

//tick every second
window.setInterval(Tick, 1000);​