计时器函数为什么不能在js里直接用 函数名() 调用

来源:8-5 计时器setTimeout()

qq_弃子_0

2016-11-15 19:36

<script type="text/javascript">
  var num=1;

  function startCount() {
  document.getElementById("count").value=num;
    num=num+1;
    setTimeout(startCount,1000);
  }
    startCount();
 // setTimeout("startCount()",1000);
</script>


写回答 关注

3回答

  • 老友丶
    2016-11-15 20:09:20
    已采纳

    你如果这样子调用,需要把这段代码放在</body>之前。就像这样:

    <!DOCTYPE HTML>

    <html>

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    <title>计时器</title>

    </head>

    <body>

    <form>

    <input type="text" id="count"  />

    </form>

    <script type="text/javascript">

      var num=1;

      function startCount() {

      document.getElementById("count").value=num;

        num=num+1;

        setTimeout(startCount,1000); 

      }

        startCount();

     // setTimeout("startCount()",1000); 

    </script>

    </body>

    </html>

    具体原因:

    首先,这里script位置在代码前面,按照页面加载顺序,从上往下;

    如果用 startCount(),当加载到document.getElementById('count')这一句的时候,并不能获取到body里面的元素(因为还没加载到),所以会报错;

    因为如果用 setTimeout("startCount()",1000),意思延迟1秒钟再去执行startCount函数,在这1秒钟内,body里面的元素已经加载完毕,再去执行startCount函数就能够正常执行document.getElementById('count');

    这就是原因,改进办法很简单,直接将整个<script>放到</body>上方即可


    老友丶 回复AaronW...

    你如果不调用,那么函数第一次在哪里执行啊? HTML中也没有事件。意思你写的js代码毫无用处。

    2016-11-29 12:10:25

    共 2 条回复 >

  • AaronWell
    2016-11-28 16:45:47

    请问为什么要在函数外面用到setTimeout("startCount()",1000)

  • qq__Yzl_0
    2016-11-20 11:01:08

    6666

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468191 学习 · 21891 问题

查看课程

相似问题