代码之家  ›  专栏  ›  技术社区  ›  Kyle Hotchkiss

循环中的一个随机数生成器语句每次都给我相同的数字。JavaScript

  •  0
  • Kyle Hotchkiss  · 技术社区  · 15 年前

    所以我在写这个循环,里面有一个随机数生成器。为什么它只为循环的所有迭代选择一个随机数而不是一个新的随机数?以下是我的代码:

    for ( i = 0; i < 25; i++ ) {
     var randNum = 0;
     var randNum = Math.floor(Math.random() * 5);
    }
    

    这在Chrome浏览器中。这个代码有什么问题吗?

    5 回复  |  直到 11 年前
        1
  •  2
  •   SLaks    15 年前

    您可能正在使用 randNum 循环内匿名函数内的变量。

    因为循环总是分配给同一个变量,所以在循环结束后对任何匿名函数的调用都只能看到最后一个数字。

    要解决此问题,请将循环体移动到单独的函数中(命名或匿名)。

        2
  •  3
  •   Anon.    15 年前

    这个代码有什么问题吗?

    “它什么都不做”是第一个问题。

    如果这是代码的“简化”版本,那么您就“简化”了重要的上下文(例如您如何尝试和使用 randNum )

        3
  •  3
  •   Soviut    11 年前

    如果我运行该代码,我会得到随机数:

    1 2 2 0 2 1 2 2 1 0 1 0 3 4 2 1 0 3 3 1 1 4 1 2 4
    

    如何读取变量?我用了这个代码:

    <script type="text/javascript">
    for ( i = 0; i < 25; i++ ) {
     var randNum = 0;
     var randNum = Math.floor(Math.random() * 5);
     document.write(randNum + "\n");
    }
    </script>
    

    我们需要更多的上下文。

        4
  •  2
  •   budzor    15 年前

    用jquery输出尝试过,它可以工作:

    <html>
        <head>
            <script src="http://code.jquery.com/jquery-latest.js"></script>
        </head>
        <body>
          <p></p>
            <script>
            for ( i = 0; i < 25; i++ ) {
                 var randNum = 0;
                 var randNum = Math.floor(Math.random() * 5);
                  $("p").append(" "+randNum);
            }
    
            </script>
        </body>
    </html>
    

    第一次我得到输出像 4 2 4 1 3 3 2 0 1 4 0 3 4 3 1 4 1 1 1 2 1 2 4 2

    第二: 1 4 1 3 1 3 0 2 1 2 1 4 3 2 0 3 3 0 4 4 3 4 4

    我看起来很好,也许问题出在不同的地方。

        5
  •  1
  •   Francisco Aquino    15 年前

    删除randnum中的重复var,但在我的chrome中,它在两种情况下都有效。使用Mac版本。这可能与您使用randnum的方式有关,您是否出于某种原因在外部使用它?你的密码什么都不做(比如写号码)。