Подтвердить что ты не робот

Javascript setTimeout() не работает

Привет, Я пытаюсь использовать функцию setTimeout() в javascript, за исключением того, что он не работает. Спасибо заранее любому, кто может помочь.
<!DOCTPYE html>
<html>
<head>
    <script>
        var button = document.getElementById("reactionTester");
        var start  = document.getElementById("start");

        function init() {
            var startInterval/*in milliseconds*/ = Math.floor(Math.random() * 30) * 1000;
            setTimeout(startTimer(), startInterval);
        }

        function startTimer() {
            document.write("hey");
        }
    </script>
</head>
<body>
<form id="form">
    <input type="button id=" reactionTester" onclick="stopTimer()">
    <input type="button" value="start" id="start" onclick="init()">
</form>
</body>
</html>
4b9b3361

Ответ 1

Эта строка:

setTimeout(startTimer(), startInterval); 

Вы вызываете startTimer(). Вместо этого вам нужно передать его в качестве функции для вызова, например:

setTimeout(startTimer, startInterval);

Ответ 2

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

т.е. работает

setTimeout(function(){ startTimer(p1, p2); }, 1000);

т.е. не сработает, потому что сразу вызовет функцию

setTimeout( startTimer(p1, p2), 1000);

Ответ 3

Две вещи.

  • Удалите скобки в setTimeout(startTimer(),startInterval);. Хранение скобок вызывает функцию немедленно.

  • Функция startTimer перезапишет содержимое страницы с помощью document.write (без вышеупомянутого исправления) и вытрите script и HTML в процессе.

Ответ 4

Если вы хотите передать параметр задержанной функции:

    setTimeout(setTimer, 3000, param1, param2);

Ответ 5

Измените свой код следующим образом:

<script>
    var button = document.getElementById("reactionTester");
    var start = document.getElementById("start");
    function init() {
        var startInterval/*in milliseconds*/ = Math.floor(Math.random()*30)*1000;
        setTimeout(startTimer,startInterval); 
    }
    function startTimer(){
        document.write("hey");
    }
</script>

Посмотрите, поможет ли это. В принципе, разница заключается в том, что вместо функции "startTimer" ссылается функция "startTimer".

Ответ 6

Чтобы сделать немного понятным, используйте ниже, который я предпочитаю больше всего. Также он позволяет сразу вызвать несколько функций. Очевидно,

setTimeout(function(){
      startTimer();
      function2();
      function3();
}, startInterval);

Ответ 7

Использование:

setTimeout(startTimer,startInterval); 

Вы вызываете startTimer() и передаете его результат (который является undefined) в качестве аргумента для setTimeout().