Javascript SetTimeout цепочка

0

Это может быть простой проблемой, но я не могу вставлять параметр переменной в функцию для будущего выполнения. "alert" - это функция, которую я хотел бы отложить выполнение, с параметрами 0, 1, 2 и т.д.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
  <script language="JavaScript">
    var init = function init() {
      for (var i = 0, max = 3; i < max; i++) {
        var then;
        then = (function(jj) {
          return jj;
        }(i));
        var pp = function(jj) {
          return alert(then);
        };

        setTimeout(function() {
         pp();
        }, then * 1000);
      }

    };
  </script>
</head>

<body onload="init();">
  <button onclick="init();"></button>

</body>

</html>        
  • 1
    Это сложный запутанный код, и я совершенно уверен, что если бы мы поняли, что вы действительно пытались сделать, было бы гораздо менее запутанные способы сделать это.
  • 1
    В чем проблема с кодом (кроме путаницы)? Значения в оповещениях неверны?
Теги:
settimeout
chaining

3 ответа

0

Это предупредит номер, затем подождет секунду и предупредит другой номер. До достижения 3:

var init = function() {
    var counter = 0, //Start
        max = 3 //End

    var count = function() {
        alert(counter) //Alert

        if ( counter < max ) { //If we havent reached 3 then queue this function to be called again
            window.setTimeout(function() {
                count()
            }, 1000)
        }

        counter++
    }

    count() //Start the counter
}

Вот скрипка: http://jsfiddle.net/EXwH2/1/

0

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
  <script language="JavaScript">
    function createfunc(i) {
        return function() { alert(i); };
    }

    var init = function init() {
        for (var i = 0, max = 3; i < max; i++) {
            var func = createfunc(i);
            setTimeout(func, i * 1000);
        }
    };

  </script>
</head>

<body onload="init();">
  <button onclick="init();"></button>

</body>

</html>
0

Вы включили первую функцию в закрытие, но не вторую, поэтому вы по существу установите ваш pp var на последнюю итерацию до того, как вызывается setTimeout в первый раз. Каково ваше намерение с переменной then? Если вы хотите пошатнуть вызовы, каждый со своим значением, вы можете захотеть поместить вызов самому setTimeout в свое собственное закрытие:

 var init = function init() {
    for (var i = 0, max = 3; i < max; i++) {
        (function (jj) {
            setTimeout(function() {
                alert(jj);
            }, jj * 1000);
        })(i);
    }
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню