JavaScript笔记之队列与事件队列

本文介绍了如何使用JavaScript构建一个基本的队列数据结构,并在此基础上扩展为事件队列,支持事件的添加、删除和执行。通过示例代码展示了队列的使用方法,包括压入元素、删除前端元素、查看前端元素、判断队列是否为空以及获取队列大小。同时,文章还给出了事件队列的实现,包括执行队首事件的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近根据工作需要参考网上资料编写了 JavaScript 的队列,并根据实际需求增加事件队列机制。具体代码如下:

1.构建 队列 数据结构对象

按照以往原型实现方式构建接口。

/*
* 队列
*/
let Queue = function () {
  // 存储
  this._items = []
}

/*
* 元素添加到队列中
*/
Queue.prototype.enqueue = function (element) {
  this._items.push(element)
}

/*
* 队列中删除前端元素
*/
Queue.prototype.dequeue = function () {
  return this._items.shift()
}

/*
* 查看前端元素
*/
Queue.prototype.front = function () {
  return this._items[0]
}

/*
* 判断队列是否为空
*/
Queue.prototype.isEmpty = function () {
  return this._items.length === 0
}

/*
* 查看队列中元素的个数
*/
Queue.prototype.size = function () {
  return this._items.length
}

export default Queue

2.队列使用

实例化队列,调用接口。

// 实例化
let queue = new Queue()

// 压入元素进队列
queue.enqueue('123')
queue.enqueue(123)
queue.enqueue({ val: 123 })

// 删除前端元素
queue.dequeue() // delete { val: 123}

// 查看前端元素
queue.front() // 123

// 获取队列大小
queue.size() // 2

3.构建 事件队列 数据结构对象

在队列的基础上,我们可以构建事件队列机制。事件队列提供拿到队首元素直接执行、并删除队首的方法,有效结合 WebWorker 等机制实现事件轮询。

// 引入先前定义好的队列
import Queue from './queue.js'

/*
* 事件队列
* 特点:FIFO 先进先出
*/
let EventQueue = function () {
  // 存储
  this._eventQueue = new Queue()
}

/*
* 元素添加到队列中
*/
EventQueue.prototype.enqueue = function (fn) {
  return this._eventQueue.enqueue(fn)
}

/*
* 队列中删除前端元素
*/
EventQueue.prototype.dequeue = function () {
  return this._eventQueue.dequeue()
}

/*
* 执行队首事件
*/
EventQueue.prototype.excute = function () {
  // 取出队首事件,并运行
  this._eventQueue.front()()

  // 移除队首事件
  return this._eventQueue.dequeue()
}

/*
* 判断队列是否为空
*/
EventQueue.prototype.isEmpty = function () {
  return this._items.length === 0
}

/*
* 查看队列中元素的个数
*/
EventQueue.prototype.size = function () {
  return this._items.length
}

export default EventQueue

4.事件队列使用

// 实例化
let event_queue = new EventQueue()

// 压入元素进队列
event_queue.enqueue(() => { console.log('Hello, world!') })

// 获取队列大小
event_queue.size() // 1

// 执行事件
event_queue.excute() // Hello, world

// 获取队列大小
event_queue.size() // 0

注:示例代码可参见 个人前端知识库


created by @SpiderWang
转载请注明作者及链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值