定时器函数的问题

定时器函数的问题

<p id="num1">0</p>
    <button id="btn1">开始</button>
    <button id="btn2">停止</button>
    <script>
        var num1 = document.getElementById('num1');
        var btn1 = document.getElementById('btn1');
        var btn2 = document.getElementById('btn2');
        var Onum1 = 0;
        
        btn1.onclick = function(){
            clearInterval(fun1);
            fun1 = setInterval(function(){
                num1.innerText = ++Onum1;
            },1000);
        }
        btn2.onclick = function(){
            clearInterval(fun1);
        }

老师我有个疑问,

fun1 = setInterval(function(){
                num1.innerText = ++Onum1;
            },1000);

这行代码不是将一个函数封装到一个全局变量中的意思吗?就是个赋值操作,那fun1的函数是怎么被调用执行的呢,这行代码不是之前那种打点调用的语句,有点不理解

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,解答如下:

1、fun1=xx是赋值操作,但是,并不是把setInterval这个函数整体赋值给了fun1,而是把setInterval的返回值赋值给了fun1

https://img1.sycdn.imooc.com//climg/646194ba0989882308110138.jpg

2、setInterval是一个比较特殊的函数,它是“定时器”。调用一次后,浏览器就会自动进行连续调用:

https://img1.sycdn.imooc.com//climg/64619525090d88cd06790208.jpg

这是特殊点,注意一下。

3、如下写法是清空定时器的固定写法,记住即可:

https://img1.sycdn.imooc.com//climg/6461957b0997644606700304.jpg

祝学习愉快!

  • 慕盖茨1446079 提问者 #1

    我不理解的地方就是2说的,如果说fun1=定时器语句;就是赋值语句  fun1收到了定时器的返回值,那fun1也没有被调用过啊,定时器是怎么被触发的呢。就比如i = 1;要显示到控制台还要写log语句,弹出框还需要alert,函数要调用还得写名字()。定时器是如何触发的呢?如果单写定时器我还能理解。但是这是个给fun1赋值的操作,其他地方没有调用过,他怎么就自动触发了呢

    2023-05-15 11:40:08
  • 好帮手慕久久 回复 提问者 慕盖茨1446079 #2

    解答如下:

    1、fun1不是用来调用的(fun1不需要调用),它只是用来接收定时器的“标识(返回值)”,后期用来清空定时器,即clearInterval中需要用到fun1。

    2、定时器,只要如下这样写,就可以自动调用:

    https://img1.sycdn.imooc.com//climg/6461ac1f091d992406540313.jpg

    只要代码中写了 setInterval(function(){ ... } , ms)这种形式,浏览器就会调用定时器。fun1的作用是清空定时器,与调用定时器无关。

    2023-05-15 11:54:10
  • 慕盖茨1446079 提问者 #3

    刚才说的逻辑有点混乱,不理解的地方是函数前面如果写了个变量接收,就一定是接收的返回值吗?等号右侧的任意函数都会先自动执行吗?

    2023-05-15 11:56:03
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师