我知道,我知道,不要使用全局变量。但是多年来我已经将它们用于各种控制结构,并且它们适用于这种旧的模块化“我反对对象”。
我当前的问题与声明为全局的数组的“消失范围”有关,稍后填写然后从其他地方引用。我经常在主要的html页面上执行以下操作:
<...>
<script type="text/javascript" src="./js/arrayStuff.js"></script>
<script type="text/javascript" src="./js/printStuff.js"></script>
<script type="text/javascript>
var gGlobalArray = new Array();
loadgGlobalArray();
printgGlobalArray();
</script>
</head>
<html>blah blah
</html>
然后我会在arrayStuff.js文件中有这样的东西来制作一个多维数组,其大小事先不知道:
function loadgGlobalArray()
{
<...>
gGlobalArray[rawFileIndex] = new Array(9);
gGlobalArray[rawFileIndex][0] = currentPathIndex;
gGlobalArray[rawFileIndex][1] = currentCtlName;
gGlobalArray[rawFileIndex][2] = currentStepbounds;
<...>
在文件printStuff,js中,我可以引用不同的尺寸OK:
<...>
buffer += "<td>"+gGlobalArray[i][7]+</td><td>+gGlobalArray[i][8]+</td>";
document.getElementByID('output').innerHTML = buffer;
<...>
现在我正在研究一个新的.js外部文件,这就是让我难过的原因。有时我的老式全球阵列按照我的意图工作,有时他们没有。我知道Javascript数组实际上是对象,并且可以理解为什么 length 属性可能不可用,例如,但是只要我离开我的常规调试,我的数组就会按照预期运行外部文件中的警报。如果我注释掉所有警报,内部数组信息消失,长度属性消失等等。如果我在我填写数组的位置放置一个警告语句,即使警报没有参考数组本身,信息被保留。为什么呢?
答案 0 :(得分:2)
假设你真的像你一样定义了数组,那么长度也不可用。也许正在发生其他事情,比如你在加载其他文件之前在文件中引用它,或者其他东西。警报可能导致暂停,让东西加载。
顺便说一句,你应该研究对象和数组文字表示法:
gGlobalArray[rawFileIndex] = new Array(9);
gGlobalArray[rawFileIndex][0] = currentPathIndex;
gGlobalArray[rawFileIndex][1] = currentCtlName;
gGlobalArray[rawFileIndex][2] = currentStepbounds;
可能是
gGlobalArray[rawFileIndex] = [
currentPathIndex, currentCtlName, currentStepbounds...];
更短更容易看。