Я знаю, я знаю, не используйте глобальные переменные. Но я использовал их для всех видов управляющих структур на протяжении многих лет, и они прекрасно работают для этого старого модульного парня «я возражаю против объектов».
Моя текущая проблема связана с «исчезающей областью действия» массивов, которые объявляются глобальными, заполняются позже, а затем на них ссылаются из других источников. На своей главной 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 может быть недоступно, но главное, что мои массивы ведут себя так, как задумано, до тех пор, пока я оставляю свои обычные предупреждения отладки. во внешних файлах. Если я закомментирую все предупреждения, информация о внутреннем массиве исчезнет, свойство length исчезнет и т. Д. Если я добавлю один бит предупреждения в бит, где я заполняю массив, , даже если предупреждение не обратитесь к самому массиву , информация сохраняется. Почему?