почему setTimeout не выполняется в JavaScript - PullRequest
0 голосов
/ 25 февраля 2011

У меня есть функция для сна в javascript, как показано ниже:

var is_sleep = true;
function sleep(time){
  if (is_sleep){
    is_sleep = false;
    setTimeout("sleep(time)", time);
  }else{
    is_sleep = true;
  }
}
sleep(3000);

Однако он проходит через операторы для is_sleep = true, не проходит через операторы is_sleep = false и больше не спит.

Может кто-нибудь сказать, в чем причина?Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 25 февраля 2011

Вероятно, вызывается setTimeout, но передаваемая ему строка не работает, так как область больше не будет содержать time, на которую вы ссылаетесь.Попробуйте заменить эту строку на:

setTimeout(function() { sleep(time); }, time);

..., которая определяет замыкание, которое использует правильную область.Вы также можете попробовать это:

setTimeout(sleep, time, time);

... который передаст time в качестве аргумента sleep.

2 голосов
/ 25 февраля 2011

setTimeout выполняется асинхронно , что означает, что это не блокирует выполнение вашего кода. Возможно, вы знали это, но функция никогда не будет соответствовать названию, которое вы выбрали для нее.

Первый вызов sleep(3000); вызывает функцию сна, делая переменную is_sleep false, устанавливая таймер, а затем немедленно возвращает выполнение кода (к тому, что приходит после sleep(3000);;))

Если setTimeout был вызван правильно (setTimeout(sleep,time,time);), через 3 секунды функция снова будет вызвана, установив is_sleep обратно в true.

...