变量输出不一致

时间:2012-10-04 09:23:22

标签: javascript jquery

前几天我为一个名为Broken History的游戏制作了一个主发生器,我和我的伙伴一起玩,我自己启动了代码,但最终获得了代码的帮助来完成它。

然后我开始为同一个游戏制作一个char gen,使用之前工作的完全相同的方法,一切都看起来很好,每个元素都做了它应该做的事情。但是,当我第一次调用变量curFaction时得到结果文本时,它第二次读取用户在选择框中选择的派系undefined时读取Saxathia$(document).ready()。变量是在{{1}}函数中赋值的,所以理论上应该在它被调用之前分配?

我想不出为什么会发生这种情况,变量作为数组的一部分被调用会产生什么影响呢?

enter image description here

这是jsLint http://jsfiddle.net/CYe8J/31/

1 个答案:

答案 0 :(得分:1)

您的问题是,在用户选择了阵营之前,您在加载页面时设置了字符描述字符串。

// curFaction is undefined here, as user cannot select a faction 
// *before* the page is loaded!!
var aLevel[1] = "Description1 of guy from " + curFaction + ".";

最快修复是在需要时生成描述。一种方法是将函数存储在aLevel中,而不是字符串,如下所示:

var aLevel[1] = function () { "Description1 of guy from " + curFaction + "."; };
var aLevel[2] = function () { "Description2 of guy from " + curFaction + "."; };
var aLevel[3] = function () { "Description3 of guy from " + curFaction + "."; };

然后,当您需要描述时,请调用函数:

// Original code:
"Stuff about claim on throne. " + aLevel[temp6] + ".";

// New code - note brackets after "aLevel[temp6]"
"Stuff about claim on throne. " + aLevel[temp6]() + ".";

created a Fiddle显示了这一点。

顺便说一下,你的代码通常可以重构很多 - 通常,如果你发现你一遍又一遍地编写相同的算法,那么你需要记住DRY principle:)