Javascript 变量输出不一致

Javascript 变量输出不一致,javascript,jquery,Javascript,Jquery,几天前,我为一个名为“我和我的伙伴玩的破历史”的游戏制作了一个主生成器,我自己开始编写代码,但最终得到了代码方面的帮助来完成它 然后我开始为同一个游戏制作一个char-gen,使用与以前完全相同的方法,一切看起来都很好,每个元素都做了它应该做的。然而,当我第一次得到结果文本时,变量curcity被称为readundefined,第二次读取用户在选择框中选择的派系,即Saxathia。变量是在$(document.ready()函数中赋值的,所以理论上应该在调用它之前赋值,对吗 我不明白为什么会发

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

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

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


这里是jsLint

您的问题是,在用户选择一个角色之前,在加载页面时设置字符描述字符串

// 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]() + ".";
我已经展示了这个


另一方面,您的代码通常会被重构很多—通常,如果您发现自己在一遍又一遍地编写相同的算法,那么您需要记住:)

您的问题是,在加载页面时,在用户选择一个角色之前,您正在设置字符描述字符串

// 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]() + ".";
我已经展示了这个


另一方面,您的代码通常会被重构很多—通常,如果您发现自己在反复编写相同的算法,那么您需要记住:)

gen调用的函数是哪一行?您应该问什么。这架直升机运转良好。问题是什么。你能在jsfiddleTry中指出这一点吗?使用firebug-观察控制台,看看底层系统是否在幕后执行任何意外的请求-也许游戏正在发出ajax请求来操纵这个变量的值。我使用内置的开发工具和chrome,我通过jslint运行了它,除了数组不是文字(这是一个警告而不是错误)之外没有其他问题。正如下面RB所说的,在用户设置变量之前,该变量正在被调用。gen调用的函数是哪一行?您想问什么。这架直升机运转良好。问题是什么。你能在jsfiddleTry中指出这一点吗?使用firebug-观察控制台,看看底层系统是否在幕后执行任何意外的请求-也许游戏正在发出ajax请求来操纵这个变量的值。我使用内置的开发工具和chrome,我通过jslint运行了它,除了数组不是文本以外没有其他问题(这是一个警告而不是错误)正如RB在下面所说的,在用户设置变量之前,变量就被调用了。谢谢:)它可能会改变很多。你是对的,但我在最小化代码方面没有太多经验。:)它可能会改变很多。你是对的,但我在最小化代码方面没有太多经验