2011-09-03 190 views
1

我在修改文本冒险游戏中的变量时遇到问题我在JavaScript中编写代码。我想使用函数内的函数(不,不是闭包)来更改全局变量的值。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()来更新健康和exp变量,以便foo()可以正确使用它们;该函数似乎没有更新变量,直到foo()运行之后。我真的不知道这是否是一个浏览器兼容性问题,这真的会让我失望,但我希望不是这样。

有什么建议吗?

+0

的最佳答案。您的“全局”变量实际上并未在全局范围内定义,因此不同的代码段正在修改变量的不同范围的副本。但是,如果没有看到真实的代码和周围的上下文,就无法知道这一点。 – jfriend00

+0

DONOTHING变量,或者应该是字符串“DONOTHING”? – Paulpro

+0

DONOTHING是一个标志性变量,但我没有在示例代码中对其进行定义。我知道在这种情况下它不起作用,但我更关心全局变量,而不是标志(实际代码中的标志被正确定义)。 – zeroslash

回答

1

看起来像it's working for me。也许这是一个范围问题 - 而不是示例代码,你可以发布你的实际相关代码吗?

+0

更多的评论,即使有关。 – 2011-09-03 05:44:01

+0

你的代码缺少if-else语句来获取变量的值来决定你是否死亡。 alert()和像log()这样的函数会像应该那样显示变量,但不会显示if-else语句。 – zeroslash

+0

@zero这没有任何意义..在任何时间点,变量的值都是相同的,无论它是否是在alert中被alert()编辑或评估的。张贴一些真实的代码,因为别的事情正在发生。 –

2

存储你的价值观到窗口对象,因此将在该窗口的任何范围可用:

//take care to not overwrite native properties of the window 
window.health = 100; 
window.exp = 0; 

function refreshStats() { 
    health -= 10; 
    exp += 1; 
}