几天前,我为一款名为“ splinter 的历史”的游戏制作了一个领主生成器,我和我的 friend 一起玩,我自己开始编写代码,但最终得到了代码方面的帮助来完成它。
然后我开始为同一个游戏制作一个字符生成器,使用与之前完全相同的方法,一切看起来都很好,每个元素都做了它应该做的事情。然而,当我第一次获得结果文本时,变量 curFaction 被调用,它在第二次读取用户在选择框中选择的派系(即 Saxathia
)时读取 undefined
。该变量在 $(document).ready()
函数中分配,因此理论上应该在调用之前分配,对吗?
我不明白为什么会发生这种情况,变量作为数组的一部分被调用,这有什么区别吗?
这是 jsLint http://jsfiddle.net/CYe8J/31/
最佳答案
您的问题是您在加载页面时、在用户选择派系之前设置了字符描述字符串。
// 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 :)
关于javascript - 变量输出不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724151/