【发布时间】:2014-06-15 04:49:17
【问题描述】:
感谢你们优秀的溢出者的帮助,我修复了我那愚蠢的小 RNG 加法游戏并让它运行起来。现在,根据一位用户的建议,在编写下一个游戏之前,我正在尝试将添加游戏代码的范围从全局更改为本地;我希望每个游戏都完全包含在自己的范围内,因为我知道学习不要轻率地污染全局范围是一个好主意。但是,我对如何实现这一点有点困惑。
这是当前功能加法游戏的代码:
function beginAdditionChallenge() {
var x = Math.ceil(Math.random()*100);
alert(x);
for (var i = 0; i < 3; i++) {
var a = Number(prompt("Provide the first addend.", ""));
var b = Number(prompt("Provide the second addend.", ""));
if (a + b === x) {
alert("Well done!");
break;
}
else if (a + b !== x && i < 2) {
alert("Please try again.");
}
else {
alert("Derp.");
}
}
}
function initChallenge() {
var button = document.getElementById("challengeButton");
button.addEventListener("click", beginAdditionChallenge);
}
window.addEventListener("load", initChallenge);
这是我尝试包装它的尝试,它只成功地破坏了游戏,以至于按钮甚至没有响应:
window.addEventListener("load", function() {
function beginAdditionChallenge() {
var x = Math.ceil(Math.random()*100);
alert(x);
for (var i = 0; i < 3; i++) {
var a = Number(prompt("Provide the first addend.", ""));
var b = Number(prompt("Provide the second addend.", ""));
if (a + b === x) {
alert("Well done!");
break;
}
else if (a + b !== x && i < 2) {
alert("Please try again.");
}
else {
alert("Derp.");
}
}
}
function initChallenge() {
var button = document.getElementById("challengeButton");
button.addEventListener("click", beginAdditionChallenge);
}
window.addEventListener("load", initChallenge);
});
功能代码在 JSFiddle here 上可用。
【问题讨论】:
-
你可以对本地上下文使用自调用函数,它也不会破坏你的代码。
-
你只需要学习如何使用小提琴...何时关闭
onLoad设置
标签: javascript function scope lexical-scope