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

计时器问题

 var attime;

  function onclock(){

    var time=new Date();          

    attime=time.getHours()+"时"+time.getMinutes()+"分"+time.getSeconds()+"秒" ;

    document.getElementById("clock").value = attime;

  }

   var int=setInterval(onclock(),1000);

为什么一直不停闪烁!

提问者:果冻上树 2016-03-25 15:06

个回答

  • LeingK
    2016-03-25 17:07:11

    用错了,应该这样写setInterval(onclock,1000);

    不能这样写:setInterval(onclock(),1000);这样写根本就没把onclock函数传给setInterval,而是执行了一遍onclock,将执行的结果传给setInterval,

    举个栗子:

    var attime;

            function abc() {

                return function onclock() {

                    var time = new Date();

                    attime = time.getHours() + "时" + time.getMinutes() + "分" + time.getSeconds() + "秒";

                    document.getElementById("clock").value = attime;

                }

            }

            var int = setInterval(abc(), 1000);

    从结果可看出是先执行bac(),得到返回值onclock,然后在执行setInterval.........

    onclock是函数本身,onclock();是执行函数的语句,不能混淆。。。。

    所以参数是函数的时候不要顺手加括号

    最后,解释一下不停闪烁的原因,只能说是被穆课网站的缓存影响了



  • 我要做一个大侠
    2016-03-25 17:00:32

    楼上正解

  • Mr_sosann
    2016-03-25 16:52:10

    不停的闪烁?setInterval(onclock(),1000) 就是每1000ms(也就是一秒)调用一次onclock() 啊,而且是一直下去,你要停下来的话就 var int=setInterval(onclock(),1000); 在 body里面加按钮取消计时器 <input type="button" value="Stop" onclick="clearInterval(int)"  /> 或者用另外一个只执行一次的计时器 setTimeout()

  • 果冻上树
    2016-03-25 16:43:27

    定义bian liang mei you yong

  • xujunhai1994
    2016-03-25 16:15:23

    var int=setInterval(onclock(),1000);

    这个代码错了。

    setInterval(onclock(),1000);

    这句代码的意思是在一秒后,执行onclock()。前面的那些根本不需要