【问题标题】:infinite loop showing random numbers js无限循环显示随机数js
【发布时间】:2014-01-04 06:24:32
【问题描述】:

我的代码没有按我想的那样工作。它必须显示一个随机数,但每隔几毫秒就会改变一次,并且不会停止。

这是 DOM:

<p>Random number:</p>
<p id="random_number"></p>

还有我的脚本:

var random_script = function() {
    while (true) {
        setTimeout(function(){
           var t = Math.round(Math.random() * (100 - 1) + 1);
           document.getElementById("random_number").innerHTML = t;
        }, 1000);
    }
}();

但是 chrome 一直在崩溃。请问有什么帮助吗?

【问题讨论】:

标签: javascript loops random settimeout


【解决方案1】:

我建议:

(function(el, interval) {
    window.setInterval(function(){
        // you can use the math you were using, but I can't see the necessity
        el.textContent = Math.floor(Math.random() * 100);
    }, interval);
})(document.getElementById('random_number'), 1000);

JS Fiddle demo.

这种方法是一个立即调用的函数表达式,它将相关参数传递给函数,然后将函数设置为在定义的时间间隔内执行。这使用window.setInterval 以重复的间隔重复/重新调用传递的函数,而不是在一个间隔之后 只执行一次(就像setTimeout 那样)。

参考资料:

【讨论】:

    【解决方案2】:

    http://jsfiddle.net/5FE8p/ 会有所帮助。

    function myFunc ()
    {
        setTimeout(function() {
            var t = Math.round(Math.random() * (100 - 1) + 1);
            console.info(t);
            document.getElementById("random_number").innerHTML = t;
            myFunc();
        }, 1000);
    }
    myFunc();
    

    您不应一次调用 settimeout 多次。它们是异步触发的......

    【讨论】:

      【解决方案3】:
          setInterval(function(){
             var t = Math.round(Math.random() * (100 - 1) + 1);
             document.getElementById("random_number").innerHTML = t;
          }, 1000);
      

      【讨论】:

      • 一个问题,为什么它即使不在循环中也能连续运行?我不明白,但它正在工作。
      • setInterval() 方法将继续调用该函数,直到调用 clearInterval() 或关闭窗口。更多信息w3schools.com/jsref/met_win_setinterval.asp
      • 好的。在发布问题之前,我需要先进行研究。谢谢nzn
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多