函数和变量"未定义"?

时间:2014-06-12 22:33:27

标签: javascript jquery

每当我运行此代码时,所有变量和函数都“未定义”,但是我看到没有错误

这是我的代码,谢谢

    <script>
        function Random() {
            var rand = Math.floor(Math.random() * 600);
        }
        $(function() {
            function Game() {
                $("#btn_1", "#btn_2", "#btn_3").fadeIn();
                Random()
                $("#btn_1").css("margin-left", rand);
                Random()
                $("#btn_1").css("margin-top", rand);
                Random()
                $("#btn_2").css("margin-left", rand);
                Random()
                $("#btn_2").css("margin-top", rand);
                Random()
                $("#btn_3").css("margin-left", rand);
                Random()
                $("#btn_3").css("margin-top", rand);
            }
        });

    </script>
</head>
<body>
    <button id="start">Start</button>
    <button id="btn_1" class="btn">One</button>
    <button id="btn_2" class="btn">Two</button>
    <button id="btn_3" class="btn">Three</button>
</body>

2 个答案:

答案 0 :(得分:0)

正如已经说过的那样,您的rand变量是一个局部变量,因此在其函数之外不可用。但是,不是将其声明为全局,您只需从函数中返回随机值并使用函数的返回值,您也可以链接一些这样的操作,我认为没有理由为什么这些代码是在jQuery ready块中:

<script>
    function Game() {

        function rand() {
            return Math.floor(Math.random() * 600);
        }

        $("#btn_1, #btn_2, #btn_3").each(function() {
            $(this).css({"margin-left": rand(), "margin-top": rand()}).fadeIn();
        });
    }

</script>
</head>
<body>
    <button id="start">Start</button>
    <button id="btn_1" class="btn">One</button>
    <button id="btn_2" class="btn">Two</button>
    <button id="btn_3" class="btn">Three</button>
</body>

这有以下好处:

  1. 不再需要全局rand变量
  2. 删除使用副作用
  3. 减少评估选择器和创建jQuery对象的次数
  4. 使您的游戏功能在全球范围内可用,这样您就可以在任何地方调用它(这听起来像您认为的那样)。
  5. 删除不需要的jQuery ready块,但将Random()函数保存在私有上下文中,这样就不会污染全局命名空间。
  6. 将多重选择器修复为一个字符串,每个子片段用逗号分隔(这是多重选择器的正确语法)。
  7. 仅评估多重选择器一次,并将这些结果用于所有操作。

答案 1 :(得分:-1)

这应该有效。你的问题是范围。其他函数无法访问使用var的函数内部声明的内容(除非它们在同一范围内定义)

以下是你如何做到这一点并揭露游戏。你可以用同样的方式暴露随机。

但是,最好将代码保留在范围或闭包(function() { // your code })();中,并且只公开代码的必要部分。

以下是关于范围的详细阅读:http://www.smashingmagazine.com/2009/08/01/what-you-need-to-know-about-javascript-scope/

$(function() {

    function Random() {
        return Math.floor(Math.random() * 600);
    }

    function Game() {
        $("#btn_1", "#btn_2", "#btn_3").fadeIn();
        $("#btn_1").css("margin-left", Random());
        $("#btn_1").css("margin-top", Random());
        $("#btn_2").css("margin-left", Random());
        $("#btn_2").css("margin-top", Random());
        $("#btn_3").css("margin-left", Random());
        $("#btn_3").css("margin-top", Random());
    }
    window.Game = Game;
});