javascript - 变量输出不一致

标签 javascript jquery

几天前,我为一款名为“ splinter 的历史”的游戏制作了一个领主生成器,我和我的 friend 一起玩,我自己开始编写代码,但最终得到了代码方面的帮助来完成它。

然后我开始为同一个游戏制作一个字符生成器,​​使用与之前完全相同的方法,一切看起来都很好,每个元素都做了它应该做的事情。然而,当我第一次获得结果文本时,变量 curFaction 被调用,它在第二次读取用户在选择框中选择的派系(即 Saxathia)时读取 undefined 。该变量在 $(document).ready() 函数中分配,因此理论上应该在调用之前分配,对吗?

我不明白为什么会发生这种情况,变量作为数组的一部分被调用,这有什么区别吗?

enter image description here

这是 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/

相关文章:

javascript - 设置新元素类属性值

javascript - 如何在 Sencha touch 文本字段中仅允许小数?

javascript - backbone.js - 事件,知道点击了什么

javascript - 菜单打开时如何展开DIV

Javascript推送方法不起作用

jquery - 允许用户选择和复制 Bootstrap 按钮标签

javascript - 列出chrome打包应用中的目录内容

javascript - 在数组内的对象中提取数组

javascript - Ajax 表单提交给两个脚本

javascript - 使用DataTables替换表体