笔记八、JavaScript——定时器、异步代码、时间对象

79 阅读4分钟

1.定时器

1.setInterval计时器

  • 计时器,每间隔固定的时间执行一次
  • 语法:setInterval(函数, 数字/时间)
    • 函数:每间隔固定的时间要执行的代码
    • 数字:间隔的时间,注意单位是 毫秒 ,最小值是4-20
// 1. 计时器 setInterval
var timeId1 = setInterval(function () {
    console.log('我是一个定时器~~~')
}, 1000)

2.setTimeout倒计时器

  • 倒计时器,在指定时间到达后执行一次
  • 语法:setTimeout(函数, 数字)
    • 函数:在指定时间到达后要执行的代码
    • 数字:间隔时间,单位也是毫秒
// 2. 倒计时器 setTimeout
var timeId2 = setTimeout(function () {
    console.log('我是一个倒计时器')
}, 3000)

3.两个定时器的返回值与意义

  • 返回值不区分定时器种类,用于表示你这个定时器是页面中第几个定时器
  • 作用:用来关闭定时器
console.log('计时器ID: ', timeId1) //计时器ID:  1
console.log('倒计时器ID: ', timeId2) //倒计时器ID:  2

4.关闭定时器

  • 不区分定时器种类,只要给出正确的定时器返回值就可以关闭
  • 语法:clearTimeout(定时器返回值) clearInterval(定时器返回值)
    • 注意:能够关闭计时器,也能关闭倒计时器
      • 开发人员的约定:这个clearInterval(定时器返回值)只用来关计时器,这个clearTimeout(定时器返回值)只用来关闭倒计时器
// clearTimeout(timeId1)
clearTimeout(timeId2) //只用来关闭倒计时器
clearInterval(timeId1) //只用来关计时器
//clearInterval(timeId2)

2.异步代码

  • 简单的代码异步执行机制这是一道面试题, 请熟读并背诵全文
  1. 什么是非异步代码
  • 按照从上往下的顺序, 从左到右的顺序, 依次执行每一行代码,
  • 如果上一行代码没有执行完毕, 不会执行下一行代码
  1. 什么是异步代码
  • 当代码遇到异步任务的时候, 会把这个代码放在 '异步队列' 内等待
  • 所有的同步代码全都执行完毕之后, 再开始执行 "异步队列" 内的代码
  • 简单来说: 代码在执行的时候 如果遇到异步任务, 会先放在 '异步队列' 内等着, 然后继续往下执行,直到把所有的同步代码执行完毕后, 在开始执行异步任务
    1. 什么是异步任务
  • 两种定时器都是异步任务
  • 可以理解: 先执行定时器外面的代码, 然后执行定时器里边的代码
console.log('1')

setTimeout(function () {
    console.log('2')
}, 3000)

console.log('3')

setTimeout(function () {
    console.log('4')
}, 4000)

console.log('5')

setTimeout(function () {
    console.log('6')
}, 2000)

console.log('7')

结果: 异步代码.jpg

3.时间对象

在 JS 中 Date 给我们提供了操作时间的一些方法, 是 JS 内置的一个对象

var timer = new Date()  // new Date()   会给我们返回一个时间对象
console.log(timer)
//Thu Jan 05 2023 20:24:35 GMT+0800 (中国标准时间)

1.时间对象的参数

创建时间对象的时候, 可以选择传递参数, 也可以不传递参数

  • 如果需要传递参数, 分为两种形式
  1. 数字
  • 最少要传递两个值, 年 和 月(JS中0-11代表了1-12月)
  1. 字符串
  • 最少之需要传递一个参数年份即可 (字符串的形式传递时月份从 1 开始)
//传参
// 1. 数字
//                   年    月   天  时  分  秒
var timer = new Date(1999, 00, 31, 23, 59, 59)
console.log(timer)
//Sun Jan 31 1999 23:59:59 GMT+0800 (中国标准时间)

// 2. 字符串
var timer = new Date('2019-02-13 13:14:15')
console.log(timer)
//Wed Feb 13 2019 13:14:15 GMT+0800 (中国标准时间)


// 不传参
var timer = new Date()
console.log(timer)  
// Wed Jan 04 2023 14:12:28 GMT+0800 (中国标准时间)

2.获取时间对象

var timer = new Date()

//获取 年
console.log(timer.getFullYear()) //2023

//获取 月(0-11)
console.log(timer.getMonth()) //0

// 获取 日
console.log(timer.getDate()) //5

// 获取 周几
console.log(timer.getday()) //4

// 获取时分秒
connsole.log(timer.getHours())
console.log(timer.getMinutes())
console.log(timer.getSeconds())

3.设置时间对象

注意, 没有设置 本周的第几天

var time = new Date()

//设置 年
timer.setFullYear(2008)
console.log(timer.getFullYear()) //2008

//设置 月(0-11)
timer.setMonth(11)
console.log(timer.getMonth()) //12

// 设置 日
timer.setDate(20)
console.log(timer.getDate()) //20

**// 注意, 没有设置 本周的第几天**

// 设置 时
timer.setHours(21)
connsole.log(timer.getHours())

// 设置 分
timer.setHours(30)
console.log(timer.getMinutes())

 // 设置 秒
timer.setHours(50)
console.log(timer.getSeconds())

// 设置 毫秒
timer.setMilliseconds(888)
console.log(timer.getMilliseconds()) //888

// 直接设置 到 1970 的总毫秒
timer.setTime(123456789)
console.log(timer.getTime())