如何在函数中使用时间间隔?

时间:2021-03-21 06:33:19

标签: javascript setinterval

我希望字母 'q' 每秒只写入一次。 但它每秒翻一番。 如何使用此命令执行此操作?

function writeNow() {
   document.write('q');
   setInterval(writeNow, 1000);
}
writeNow();

5 个答案:

答案 0 :(得分:3)

要在函数外设置区间,在函数内调用时会递归

试试

function writeNow() {
    document.write('q');
}
setInterval(writeNow, 1000);
writeNow();

我强烈建议不要使用 document.write,因为它已被弃用

答案 1 :(得分:3)

您可以使用 setTimeout

   function writeNow() {
      document.write('q');
      setTimeout(writeNow, 1000);
    }
    writeNow();

或者 setInterval

function writeNow() {
  document.write('q');
}
setInterval(() => {
  writeNow()
}, 1000);

答案 2 :(得分:2)

<块引用>

但它每秒翻倍

因为您在方法内部调用 setInterval。所以它看起来像 recursion

解决方案:

您应该将 setInterval(writeNow, 1000); 移到被调用函数之外 - writeNow


Syntax

<块引用>

setInterval(function, milliseconds, [param1, param2, ...])

function writeNow() {
   document.write('q');
}
setInterval(writeNow, 1000);

答案 3 :(得分:0)

下面的代码完成了这项工作。可能可以稍微微调以提高性能:

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
        #letters
        {
            padding: 10px;
            margin: 10px;
        }
    </style>
  </head>
  <body>
    <div id="letters">

    </div>
  </body>

  <script type="text/javascript">
      let alphabets = [];
      let running = false;
      let output = "";

      function prepare()
      {
          for(i=65; i<92; i++)
          {
              console.log(String.fromCharCode(i));
              alphabets.push(String.fromCharCode(i));
          }
      }

      let lastPrinted = 0;

      function printAlphabet()
      {
          if(lastPrinted == 0)
          {
              running = true;
          }
          else if(lastPrinted == 26)
          {
              running = false;
          }

          if(running)
          {
              output += (alphabets[lastPrinted]) + ","
              document.getElementById('letters').innerHTML = output;
              lastPrinted ++;
              setTimeout(printAlphabet, 1000);
          }
          else
          {
              output = output.substring(0,output.length - 1)+".";
              document.getElementById('letters').innerHTML = output;
          }
      }

      prepare();
      printAlphabet();
  </script>

</html>

输出:

A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z

答案 4 :(得分:0)

试试这个

<script>
  function writeNow() {
    document.write('this');
  }
  setInterval(writeNow, 1000);
</script>

你正在递归调用一个函数