значения массива javascript недоступны вне функции

Извините, что спрашиваю об этом, но я искал везде и не могу уследить за этим.
Я пытаюсь переработать пример Google Maps версии 2, чтобы он работал в версии 3. У меня есть набор «конечных точек» на расстоянии езды от центральной точки, вокруг которой я хочу нарисовать многоугольник. Они записываются в массив (в коде их три, которые должны работать: driveMarkersArray - текущий, или drivePolyPoints или markersArray) Внутри функции process1direction(from,to), которая это делает, они наверняка есть, (хотя интересно фаербаг консоль сообщает о них в конце, после того как вся обработка завершена?) НО, когда затем обрабатывается в другой функции draw_DrivePolygon() для рисования многоугольника, массив оказывается пустым. Это просто объявления (я много проверял) или что-то связанное с асинхронным запросом, чтобы найти направления движения?


person tony goodwin    schedule 01.01.2013    source источник
comment
не могли бы вы сократить код до соответствующего бита   -  person Asad Saeeduddin    schedule 01.01.2013
comment
Вы просто копируете туда всю свою программу. Вы получите лучшие ответы, если создадите минимальный пример. На самом деле, вы даже можете решить это самостоятельно, сделав это.   -  person hugomg    schedule 01.01.2013
comment
Я тщательно просмотрел ваш код, и в строке 324 есть... нет, шучу, я не просматривал ваш код. :P   -  person Šime Vidas    schedule 01.01.2013
comment
@Charlie также не является полным списком программы.   -  person    schedule 01.01.2013
comment
@tonygoodwin: Другие имеют в виду, что вам нужно создать пример, демонстрирующий проблему, используя для этой цели минимальный объем кода. РЕДАКТИРОВАТЬ: Кроме того, само собой разумеется, что вы лучше поймете проблему, сделав это, и, возможно, даже решите ее самостоятельно.   -  person    schedule 01.01.2013
comment
@bvukelic и всем остальным, спасибо за отзывы. Я сам сокращал код, но вы правильно подтолкнули меня свести к основному вопросу. Я сделал это и разместил полный оставшийся код, так как я до сих пор не знаю, связано ли это с объявлением переменных или другого корня. Уверяю вас, я просмотрел другой ответ и проверил, что рассматриваемые массивы объявлены глобально. спасибо за вашу поддержку.   -  person tony goodwin    schedule 02.01.2013
comment
Итак, проблем с кодом так много, что даже страшно их обсуждать. Во-первых, столько глобальных переменных, что даже не смешно. Так много функций с состоянием, что это еще менее смешно. Вы должны попытаться сделать функции более функциональными: больше зависеть от их входного значения и возвращать полезные значения, а не зависеть от установки глобальных переменных. Это должно значительно упростить отладку.   -  person    schedule 02.01.2013
comment
Одна очевидная проблема заключается в том, что вызов process1direction() всегда будет возвращать неопределенное значение, потому что это асинхронная функция, и все же вы устанавливаете переменную в ее возвращаемое значение (которое, опять же, всегда неопределенное).   -  person    schedule 02.01.2013
comment
Я ценю ваше время. endPoint = process1direction(центр,точка); Я пытался получить результат от этого раньше и потерпел неудачу, и должен был удалить его при уборке, поэтому следует читать: process1direction(center,point);. Моя основная проблема заключается в том, что, несмотря на то, что в каждом из var markersArray, drivePolyPoints, driveMarkersArray есть значения, в то время как в функции они недоступны в draw_DrivePolygon(). Пожалуйста, как мне их пройти?   -  person tony goodwin    schedule 02.01.2013
comment
Ответ найден. Не связано с объявлением переменной, а связано с асинхронным вызовом. Ответ № 2 в ссылке был самым четким объяснением того, что нужно делать. Я действительно нашел «жесткую любовь» выше и подтверждение того, что асинхронность актуальна, очень полезно от @bvukelic. Опубликовал бы решение, но оно было закрыто.   -  person tony goodwin    schedule 02.01.2013
comment
@tonygoodwin Да, некоторые люди на этом сайте просто слишком счастливы. :) Рад, что вы решили эту проблему.   -  person    schedule 03.01.2013


Ответы (1)


В JavaScript переменная имеет свой уровень функции области видимости. Не блочный уровень.

Посмотрите здесь для области видимости переменных в JavaScript

javascript-variable-scope

Область действия переменной и ключевое слово var.< /сильный>

person Raghvendra Parashar    schedule 01.01.2013
comment
Спасибо, не могли бы вы помочь мне, указав, как изменить переменную на уровень блока? Я просмотрел примеры и думаю, что объявил их глобально. - person tony goodwin; 02.01.2013