Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как локальную переменную сделать глобальной. (https://javascript.ru/forum/misc/53384-kak-lokalnuyu-peremennuyu-sdelat-globalnojj.html)

mikuskov 01.02.2015 20:57

Как локальную переменную сделать глобальной.
 
Здравствуйте.
На форуме и где-то в интернете находил ответы на свой вопрос, но у моего скрипта есть специфика, для которой ответы не подходят, поэтому прошу помощи.

Есть скрипт, который обращается к 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 является локальной, но мне её нужно сделать глобальной. Никак не получается. Подскажите, пожалуйста, я со скриптами вообще на "вы".

ksa 01.02.2015 21:02

Цитата:

Сообщение от mikuskov
Переменная tutu является локальной, но мне её нужно сделать глобальной. Никак не получается.

И не получится...
Если переменная уже объявлена в некой области видимости - это уже не изменить.
Но. Значение переменной можно присвоить еще кому-то...

mikuskov 01.02.2015 21:10

Можно заранее, до функций объявить переменную, можно и присваиванием другой переменной, любые варианты. Главное, получить time.getHours(); для "дальнейшего использования", уже вне функций - вот никак не удаётся, например, уже после этого скрипта, где-то далеко ниже в коде вывести document.write(tutu);

ksa 01.02.2015 21:25

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);

mikuskov 01.02.2015 22:20

Не получается:


<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".

MallSerg 01.02.2015 22:28

добавь после "<script type="text/javascript">alert(tutu);</script>"
Строчку "<button onclick="alert(tutu)"> Алертить ТуТу</button>"

И попробуй догадаться почему в первов алерте tutu == undifined
а после нажатия на кнопку tutu != undifined

mikuskov 01.02.2015 22:35

Спасибо, но я понятия не имею, я не владею в должной мере скриптами. Мне нужно ниже в коде будет использовать <script type="text/javascript">if tutu == 22 {...
То есть, далее - переменную буду использовать внутри <script type="text/javascript"></script>, а это не работает!

MallSerg 01.02.2015 23:10

Твоя проблема в том что ты пытаешься использовать переменную до того как ей присвоено значение
а значение ей присваивается после определенных событий которые наступают в браузере (напремер загружен и выполнен скрипт который присваивает переменной значение).
Самое простое решение это выполнять свой код после наступления события (onload).
Тебе просто нужно разобраться какие скрипты(строчки кода) и после чего выполняются.

danik.js 02.02.2015 01:28

mikuskov, MallSerg все правильно сказал, но если тебе нужно получить время только один раз, при загрузке страницы - то можешь для подключения скрипта использовать document.write() - тогда при его загрузке поток будет заблокирован.

mikuskov 02.02.2015 08:11

Т.е. что-то нужно написать в <body onload=... ? Но что, можете подсказать? Как присвоить значение сразу, при загрузке документа?


Часовой пояс GMT +3, время: 04:24.