Как локальную переменную сделать глобальной.
Здравствуйте.
На форуме и где-то в интернете находил ответы на свой вопрос, но у моего скрипта есть специфика, для которой ответы не подходят, поэтому прошу помощи. Есть скрипт, который обращается к json и получает точное время региона юзера, вне зависимости от того, что показывают его часы. А если точнее, я получаю текущий час: <script type="text/javascript"> function getTime(zone, success) { var url = 'http://json-time.appspot.com/time.json?tz=' + zone, ud = 'json' + (+new Date()); window[ud]= function(o){ success && success(new Date(o.datetime)); }; document.getElementsByTagName('head')[0].appendChild((function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = url + '&callback=' + ud; return s; })()); } getTime('GMT', function(time){ var tutu = time.getHours(); }) </script> Переменная tutu является локальной, но мне её нужно сделать глобальной. Никак не получается. Подскажите, пожалуйста, я со скриптами вообще на "вы". |
Цитата:
Если переменная уже объявлена в некой области видимости - это уже не изменить. Но. Значение переменной можно присвоить еще кому-то... |
Можно заранее, до функций объявить переменную, можно и присваиванием другой переменной, любые варианты. Главное, получить time.getHours(); для "дальнейшего использования", уже вне функций - вот никак не удаётся, например, уже после этого скрипта, где-то далеко ниже в коде вывести document.write(tutu);
|
mikuskov, пробуй так...
var tutu; function getTime(zone, success) { var url = 'http://json-time.appspot.com/time.json?tz=' + zone, ud = 'json' + (+new Date()); window[ud]= function(o){ success && success(new Date(o.datetime)); }; document.getElementsByTagName('head')[0].appendChild((function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = url + '&callback=' + ud; return s; })()); } getTime('GMT', function(time){ tutu = time.getHours(); }); alert(tutu); |
Не получается:
<script type="text/javascript"> var tutu; function getTime(zone, success) { var url = 'http://json-time.appspot.com/time.json?tz=' + zone, ud = 'json' + (+new Date()); window[ud]= function(o){ success && success(new Date(o.datetime)); }; document.getElementsByTagName('head')[0].appendChild((function() { var s = document.createElement('script'); s.type = 'text/javascript'; s.src = url + '&callback=' + ud; return s; })()); } getTime('GMT', function(time){ tutu = time.getHours(); }) </script> </head> <body> <script type="text/javascript">alert(tutu);</script> </body> Это возвращает "undefined". |
добавь после "<script type="text/javascript">alert(tutu);</script>"
Строчку "<button onclick="alert(tutu)"> Алертить ТуТу</button>" И попробуй догадаться почему в первов алерте tutu == undifined а после нажатия на кнопку tutu != undifined |
Спасибо, но я понятия не имею, я не владею в должной мере скриптами. Мне нужно ниже в коде будет использовать <script type="text/javascript">if tutu == 22 {...
То есть, далее - переменную буду использовать внутри <script type="text/javascript"></script>, а это не работает! |
Твоя проблема в том что ты пытаешься использовать переменную до того как ей присвоено значение
а значение ей присваивается после определенных событий которые наступают в браузере (напремер загружен и выполнен скрипт который присваивает переменной значение). Самое простое решение это выполнять свой код после наступления события (onload). Тебе просто нужно разобраться какие скрипты(строчки кода) и после чего выполняются. |
mikuskov, MallSerg все правильно сказал, но если тебе нужно получить время только один раз, при загрузке страницы - то можешь для подключения скрипта использовать document.write() - тогда при его загрузке поток будет заблокирован.
|
Т.е. что-то нужно написать в <body onload=... ? Но что, можете подсказать? Как присвоить значение сразу, при загрузке документа?
|
Часовой пояс GMT +3, время: 05:06. |