【发布时间】:2011-09-03 05:29:27
【问题描述】:
我在用 JavaScript 编写代码的文本冒险游戏中修改变量时遇到问题。我想使用函数中的函数更改全局变量的值(不,不是闭包)。
/*This is just example code.*/
var health = 100;
var exp = 0;
function refreshStats() {
health -= 10;
exp += 1;
}
function foo(flag) {
if (flag == DONOTHING) {
refreshStats();
}
if (health <= 0) {
say("You died, bwahaha.");
}
if ((exp/10) == Math.floor(exp/10)) {
health += 10;
say("You leveled up!");
}
}
游戏的运作方式是,每个功能(定义为游戏中的动作或区域)将由由 JavaScript 放置的按钮和表单调用,用户可以分别单击或写入这些按钮和表单。我需要 refreshStats() 来更新 health 和 exp 变量,以便 foo() 可以正确使用它们;在 foo() 运行之前,该函数似乎不会更新变量。我确实想知道这是否是浏览器兼容性问题,这真的会让我感到厌烦,但我希望不是这样。
有什么建议吗?
【问题讨论】:
-
最佳猜测。您的“全局”变量实际上并未在全局范围内定义,因此不同的代码段正在修改变量的不同范围副本。但是,如果没有看到真实的代码和它周围的上下文,就无法知道这一点。
-
DONOTHING 是一个变量,还是应该是字符串“DONOTHING”?
-
DONOTHING 是一个类似标志的变量,但我没有在示例代码中定义它。我知道在这种情况下它不会起作用,但我更关心的是全局变量,而不是标志(实际代码中的标志是正确定义的)。
标签: javascript global-variables