跟着月影学javascript | 青训营笔记

48 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第9天。

定时器有两种

setTimeout( )

  • window.setTimeout( 调用函数 ,[延迟的毫秒数])

  • 注意

    1. window在调用时可省略

    2. 这个延迟时间单位是毫秒,但是可以省略,如果省略,默认是0

    3. 这个调用函数可以直接写函数,还可以写函数名

    • 页面中可能有多个定时器,我们经常给定时器加标识符(名字)
var time1 = setTimeout(callback, 3000);
var time2 = setTimeout(callback, 3000);
  • setTimeout( )也称为回调函数

  • 清除定时器clearTimeout( )

    • window.clearTimeout( timeoutID )

    • 注意

      1. window也可省略
      2. timeoutID是计时器的名字

setInterval( )

  • window.setInterval(调用函数,[延迟的毫秒数])

  • 注意

    1. window在调用时可省略
    2. 这个延迟时间单位是毫秒,但是可以省略,如果省略,默认是0
    3. 这个调用函数可以直接写函数,还可以写函数名
    4. 页面中可能有多个定时器,我们经常给定时器加标识符(名字)
  • 倒计时效果案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        div {
            margin-top: 200px;
            margin-left: 200px;
        }
        span {
            color: aliceblue;
            display: inline-block;
            height: 40px;
            width: 40px;
            line-height: 40px;
            background-color: black;
            text-align: center;
        }
    </style>
</head>
<body>
    <div>
        <span class="hour">1</span>
        <span class="minute">2</span>
        <span class="second">3</span>
    </div>
    <script>
        var hour = document.querySelector('.hour');
        var minute = document.querySelector('.minute');
        var second = document.querySelector('.second');
        var inputTime = +new Date('2022-2-27 18:00:00'); //返回的是用户输入时间总的毫秒数
        countDown();  //先调用一次这个函数,防止第一次刷新页面有空白
        setInterval(countDown,1000);
        function countDown() {
        var nowTime = +new Date(); //返回的是当前时间总的毫秒数
        var times = (inputTime - nowTime) / 1000; //time就是剩余时间的数
        var d = parseInt(times / 60 / 60 /24);//天
        d = d < 10 ? '0' + d : d;
        var h = parseInt(times / 60 / 60 % 24); //时
        h = h < 10 ? '0' + h : h;
        hour.innerHTML = h;
        var m = parseInt(times / 60 % 60); //分
        m = m < 10 ? '0' + m : m;
        minute.innerHTML = m;
        var s = parseInt(times % 60); //秒
        s = s < 10 ? '0' + s : s;
        second.innerHTML = s;
    }
    </script>
</body>
</html>
  • 清除定时器clearInterval( )

    • window可省略
    • 里面的参数就是定时器的标识符

两个的区别:前面那个只能调用一次,后面那个可重复调用多次

this的指向问题

  1. 全局作用域或者普通函数中的this指向全局对象window(定时器里面的this指向window)
  2. 方法调用中,谁调用this,this指向谁
  3. 构造函数中this指向构造函数的实例

立即执行函数

  • 主要作用:创建一个独立的作用域,函数里面的变量都是局部变量

  • 特点:不需要调用可直接执行,也可传递参数,若有多个立即执行函数,要用分号隔开

  • 两种写法

    1. (function ( ) { } )()
    2. (function(){}())