Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   глобальная переменная в функции - что за? :( (https://javascript.ru/forum/events/13043-globalnaya-peremennaya-v-funkcii-chto-za.html)

jss ssj 13.11.2010 20:46

глобальная переменная в функции - что за? :(
 
var timer = null;

function ttt(param){
   alert(timer);
   if(!timer){
	timer = setInterval("ttt2('"+param+"')",150);
   }
   else{
        clearInterval(timer);
        timer = null;
   }
}


при первом запуске alert(timer) говорит "undefined" вместо "null", при следующих - все ок.
Что делать? :blink:

B@rmaley.e><e 13.11.2010 20:50

var timer = null;

function ttt(param){
   alert(timer);
   if(!timer){
	timer = setTimeout(function(){alert(timer)},150);
   }
   else{
        clearInterval(timer);
        timer = null;
   }
}


ttt();
null, как и положено

valyan 29.07.2013 17:04

Здравствуйте, у меня похожая проблема.
var coord = 0;
this.Run = function(
{
...
  for (i = 0; i < orderobj.length; i++)
  {
    var geocoder = new ymaps.geocode(city + " " + orderobj[i].deliveryAddress.building.street.name + " " + orderobj[i].deliveryAddress.building.number, { results: 1 });
    geocoder.then(
    function (res) 
    {
       window.coord = res.geoObjects.get(0).geometry.getCoordinates();
    }
    );
    var order = new ymaps.Placemark([coord], // здесь вот не видит переменную
    {
    }
  }
}

Как исправить?

skrudjmakdak 29.07.2013 17:34

странно.. а вы ее в функции объявляйте или в "корне" (глобальная)??

valyan 29.07.2013 19:25

Цитата:

Сообщение от skrudjmakdak (Сообщение 264911)
странно.. а вы ее в функции объявляйте или в "корне" (глобальная)??

В функции. Вот так
function
{
 var coord = 0;
 this.Run = function(
 {
...
  for (i = 0; i < orderobj.length; i++)
  {
    var geocoder = new ymaps.geocode(city + " " + orderobj[i].deliveryAddress.building.street.name + " " + orderobj[i].deliveryAddress.building.number, { results: 1 });
    geocoder.then(
    function (res) 
    {
       window.coord = res.geoObjects.get(0).geometry.getCoordinates();
    }
    );
    var order = new ymaps.Placemark([coord], // здесь вот не видит переменную
    {
    }
  }
 }
}

skrudjmakdak 29.07.2013 19:30

попробуйте вынести ее за функцию

valyan 29.07.2013 20:28

Цитата:

Сообщение от skrudjmakdak (Сообщение 264934)
попробуйте вынести ее за функцию

var coord = 0;
function
{
 this.Run = function(
 {
...
  for (i = 0; i < orderobj.length; i++)
  {
    var geocoder = new ymaps.geocode(city + " " + orderobj[i].deliveryAddress.building.street.name + " " + orderobj[i].deliveryAddress.building.number, { results: 1 });
    geocoder.then(
    function (res) 
    {
       window.coord = res.geoObjects.get(0).geometry.getCoordinates();
    }
    );
    alert(coord); // показывает 0
    var order = new ymaps.Placemark([coord],
    {
    }
  }
 }
}

При первом "проходе" показывает "0", при втором показывает координаты.


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