-1

リアルタイム クロックを実行しようとしましたが、問題が発生しました。setTimeout が機能せず、実際にはクロック自体が更新されません。お願いできますか?

これは私が書いたコードです:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
  <p id="p"></p>
  <script>
    var currentDate = new Date();

    function startClock() {

      time = currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds();

      document.getElementById("p").innerHTML = time;

      setTimeout(startClock, 1000);
    }

    startClock();
  </script>
</body>

</html>

4

2 に答える 2

2

実際にsetTimeoutは正常に動作していますが、関数の外でインスタンス化するcurrentDateため、更新されません。

これは、日付がインスタンス化されたときにのみ時間が取得され、それ自体は更新されないためです。つまり、一度だけインスタンス化すると、インスタンス化された時点からの時間しか保持されません。

これを試して:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title></title>
</head>

<body>
  <p id="p"></p>
  <script>
    

    function startClock() {
      var currentDate = new Date();
  
      time = currentDate.getHours() + ":" + currentDate.getMinutes() + ":" + currentDate.getSeconds();


      document.getElementById("p").innerHTML = time;

      setTimeout(startClock, 1000);
    }

    startClock();
  </script>
</body>

</html>

于 2017-12-16T18:46:03.230 に答える