问答详情
源自:8-3 计时器setInterval()

不知道分析的对不对,实践出来是这样的

1、javascript代码必须放到form表单下面代码才可以正常执行,不然会报错告你document.getElementById("clock")是个空值,获取不到,
2、在setInterval()中调用clock函数的时候,只有写成clock,时间才会间隔刷新显示,如果写成clock(),时间是一直不会变得

提问者:fujinhong 2015-11-26 11:09

个回答

  • 慕男婶
    2015-11-26 13:48:34

    是的。但是总结的有点儿谬误的地方,我给你指出来

    1、javascript并不是必须放到form表单下才可以正常运行的。

     例如(script在前,clock在后):

    <script>
     // 浏览器解析网页是从上往下执行的,所以执行下面这行代码的时候,id为clock的div并没有解析到
     // 所以我获取不到
     var clock = document.getElementById("clock")
    </script>
    <div id="clock">我是clock,我在script后面</div>

      改成(div在前,script在后):

    <div id="clock">我是clock,我在script前面</div>
    <script>
     // 浏览器执行这行js代码时,上面的id为clock的div已经被解析了,所以我在下面可以获取到
     var clock = document.getElementById("clock")
    </script>

       这个才是本质原因。

      解决办法有3:

       a、在domReady后再查询,保证所有dom都构建好了

       b、在window load后再查询,页面整个加载好了,dom早就ready了

       c、就是我写的第二个例子,再要查询的标签后面获取它,因为网页是从上往下执行,写在后面,肯定能保证

            要查询的dom已经构建了


    2、setInterval(clock,1000)

         setInterval(clock(),1000)

         这两种写法并不一样,虽然看起来很像,

         第一种是把clock这个函数作为setInterval第一个参数

         第二种是吧clock的执行结果作为第一个参数

         当然,第二种如果clock执行之后返回值是一个函数,也是可以的。但一般没人这样做。。