每当我运行此代码时,所有变量和函数都“未定义”,但是我看到没有错误
这是我的代码,谢谢
<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>
答案 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>
这有以下好处:
rand
变量Random()
函数保存在私有上下文中,这样就不会污染全局命名空间。答案 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;
});