iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >javascript的事件驱动机制是什么
  • 620
分享到

javascript的事件驱动机制是什么

2024-04-02 19:04:59 620人浏览 安东尼
摘要

这篇文章主要介绍“javascript的事件驱动机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript的事件驱动机制是什么”文章能帮助大家解决

这篇文章主要介绍“javascript的事件驱动机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript的事件驱动机制是什么”文章能帮助大家解决问题。

javascript采用事件驱动。JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,它采用事件驱动的机制来响应用户操作,当用户对某个html元素进行操作的时候,会产生一个事件,该事件会驱动某些函数来处理。

教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言。

本文分别讲解了javascript在浏览器端和服务器端(node.js)的事件驱动机制,期间加入了一些异步编程的例子加深理解。

javascript 在浏览器端的事件驱动机制

首先,javascript 在浏览器端运行是单线程的,这是由浏览器决定的,这是为了避免多线程执行不同任务会发生冲突的情况。也就是说我们写的javascript 代码只在一个线程上运行,称之为主线程(HTML5提供了WEB worker api可以让浏览器开一个线程运行比较复杂耗时的 javascript任务,但是这个线程仍受主线程的控制)。单线程的话,如果我们做一些“sleep”的操作比如说:

var now = + new Date()while (+new Date() <= now + 1000){
//这是一个耗时的操所
}

那么在这将近一秒内,线程就会被阻塞,无法继续执行下面的任务。

还有些操作比如说获取远程数据、I/O操作等,他们都很耗时,如果采用同步的方式,那么进程在执行这些操作时就会因为耗时而等待,就像上面那样,下面的任务也只能等待,这样效率并不高。 为了解决单线程带来的阻塞问题很多操作系统实现了异步编程机制,浏览器中也是这么做的,主要表现如下:

  • 只在主线程中运行 javascript 代码

  • 主线程一启动就进入事件循环,整个过程就是不断的循环,不断地执行回调函数

  • 遇到网络请求、I/O操作等时,浏览器会单开工作线程来处理,并设置相应的观察者,然后立即返回主线程,主线程继续执行下面的任务

  • 浏览器开的线程处理好任务或者有监听的事件后会用得到的数据(或输入)形成一个事件,放在相应观察者的事件队列中,事件队列是在主线程中

  • 主线程不断的循环,不断检查事件队列,通过遍历事件依次执行事件对应的回调函数

注意:下图中的消息队列是存储在主线程中

javascript的事件驱动机制是什么

上图中,假设你发起了一个ajax请求,无论你把这个请求写在什么地方,它始终都在回调函数里。因为事件驱动机制就是把一切抽象为事件,代码开始执行也是一个事件,也会隐式调用回调函数,调用回调函数就是开始执行代码。然后主线程发起异步任务后就会随即返回,继续执行"代码开始事件"对应回调函数里下面的代码,等到这个回调函数执行完毕,就会执行下一个事件。在这之间,Ajax线程会完成请求,然后把请求完成的事件(包含返回的数据)发送到事件队尾中等待处理,等到主线程执行到这个事件时,指定的回调函数即被执行。

大概是这样。如果有几处疑问的话请往下看。下面结合代码讲一下具体的过程和机制。

console.log("开始");setTimeout(function(){
  console.log('延迟执行的')
}, 1000);setTimeout(function(){
  console.log('立即执行的')
}, 0);
console.log('结束') //开始 结束 立即执行的 延迟执行的

watcher机制

watcher,观察者,是事件驱动系统重要的机制。

setTimeout称为定时器,这是浏览器给的API。每当你使用定时器,这个函数将会设置一个watcher,观察者。主线程会不断的循环,不断的"经过"这里检查时间,当主线程检查时间间隔符合要求时,就会产生一个定时器事件,加入到这个watcher事件队列中并执行回调函数。因此执行setTimeout只是在时间到的时候产生了要调用回调函数的消息加入到了事件队列中,因此,回调函数并不一定在指定的时间时调用,它取决于前面有多少等待处理的事件。

javascript的事件驱动机制是什么

刚才讲的是定时器观察者,还有I/O观察者、网络请求观察者、鼠标事件观察者、键盘事件观察者等等等等,我们经常遇到事件监听函数会让你绑定一个回调函数,这种监听函数一般就会设置watcher,其他线程产生的事件也会放到相应watcher的事件队列中,因此每个watcher产生自己的事件队列主线程在循环的时候,实际上是在依次调用这些watcher,检查每个watcher的事件队列,有事件就执行相应的回调。

javascript的事件驱动机制是什么

它的过程就是 :

  • 进程一启动就进入事件循环

  • 有监听就添加watcher

  • 遍历watcher下的事件队列

  • 执行下一个watcher

事件驱动机制,它会有各种各样的事件,大量的事件,它所做的一切都跟处理事件有关。但并不是所有的事件都有watcher,如果都有,主进程任务会变得非常繁重,况且有些事件我们并不关心,例如你只写了一个定时器,代表你关心这个事件,那么点击事件、网络请求事件就不用关心,因为你根本就没写啊,也就没有watcher

javascript 在 node.js上的事件驱动机制

javascript 在 node.js上的事件驱动机制与浏览器端大致相同,都是单线程,都有event loop,上面讲的javascript在浏览器端的事件循环机制在node上也是大致一样的,不同的是执行者何执行者的行为不一样,因为他们关注的任务不一样:

  • node端异步机制和事件循环更加纯粹一些。node为了支持高并发,所有的API几乎都是异步的,这样会充分利用操作系统的其他线程来帮忙完成任务,主线程只负责事件消费。例如当web server接收到请求,node就把它关闭,交给其他线程进行处理,然后去服务下一个web请求。当这个请求完成,它被放到处理队列,当到达队列开头,这个结果被返回给用户。这样的话webserver一直接受请求而不等待任何读写操作,这种非阻塞型I/O性能很强。

  • 浏览器端是浏览器负责执行BOM API,管理线程,处理用户输入信息等,在node上是node的一个核心库libuv负责执行node API,管理主线程(运行javascript)和工作线程等。

  • 因为前端后端关注的内容不同,因此两个运行环境的API也专注于不同的任务

关于“javascript的事件驱动机制是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网html频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: javascript的事件驱动机制是什么

本文链接: http://www.lsjlt.com/news/88780.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javascript的事件驱动机制是什么
    这篇文章主要介绍“javascript的事件驱动机制是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript的事件驱动机制是什么”文章能帮助大家解决...
    99+
    2024-04-02
  • javascript的事件驱动是什么
    本篇文章为大家展示了javascript的事件驱动是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。javascript的事件驱动有:1、鼠标单击事件“oncli...
    99+
    2024-04-02
  • Javascript中事件驱动的原理是什么
    本篇文章为大家展示了Javascript中事件驱动的原理是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先来看看这样一个应用场景,网页上有个链接,比如说高级搜...
    99+
    2024-04-02
  • javascript是不是事件驱动
    本文小编为大家详细介绍“javascript是不是事件驱动”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript是不是事件驱动”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新...
    99+
    2024-04-02
  • javascript是不是事件驱动的语言
    这篇文章主要介绍“javascript是不是事件驱动的语言”,在日常操作中,相信很多人在javascript是不是事件驱动的语言问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • Redis的事件驱动模型是什么
    这篇文章主要讲解了“Redis的事件驱动模型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis的事件驱动模型是什么”吧!为什么 Redis 不使用基本的 Socket 编程模型?...
    99+
    2023-06-30
  • 什么是Flex事件机制
    这篇文章主要为大家展示了“什么是Flex事件机制”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“什么是Flex事件机制”这篇文章吧。Flex事件机制介绍1.什么是Flex事件机制Flex事件可以看...
    99+
    2023-06-17
  • 浅谈用java实现事件驱动机制
    由于项目需求,需要为Java提供一套支持事件驱动机制的类库,可以实现类似于C#中的event和delegate机制。众所周知,Java语言本身以及其标准库中并没有提供事件驱动机制的相关接口,虽然Swing(我且认为其不属于标准库,因为一般没...
    99+
    2023-05-31
    java 事件处理机制 ava
  • web前端中事件驱动指的是什么
    这篇“web前端中事件驱动指的是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“web前...
    99+
    2024-04-02
  • Redis中事件驱动模型的作用是什么
    这篇文章给大家介绍Redis中事件驱动模型的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。前言Redis 是一个事件驱动的内存数据库,服务器需要处理两种类型的事件。文件事件时...
    99+
    2024-04-02
  • Javascript事件机制兼容性解决方法是什么
    本篇内容主要讲解“Javascript事件机制兼容性解决方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Javascript事件机制兼容性解决方法是什么...
    99+
    2024-04-02
  • JavaGUI事件监听机制是什么
    今天小编给大家分享一下JavaGUI事件监听机制是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一个事件模型中有上对象:...
    99+
    2023-07-05
  • C++ 函数在并发编程中的事件驱动机制?
    并发编程中的事件驱动机制通过在事件发生时执行回调函数来响应外部事件。在 c++++ 中,事件驱动机制可用函数指针实现:函数指针可以注册回调函数,在事件发生时执行。lambda 表达式也可...
    99+
    2024-04-26
    并发编程 事件驱动 c++ 点击事件
  • Node事件循环机制是什么
    这篇文章主要介绍“Node事件循环机制是什么”,在日常操作中,相信很多人在Node事件循环机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Node事件循环机制是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • android事件处理机制是什么
    Android事件处理机制指的是Android系统中对用户输入事件以及其他系统事件的处理方式。Android系统中的事件处理机制主要包括以下几个部分:1. 事件触发:Android系统通过底层硬件驱动来获取用户输入事件,包括触摸事件、按...
    99+
    2023-08-11
    android
  • javascript事件是什么
    这篇文章将为大家详细讲解有关javascript事件是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为J...
    99+
    2023-06-15
  • node中事件机制的原理是什么
    今天就跟大家聊聊有关node中事件机制的原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Publish/Subscribe(发布/订阅模式)...
    99+
    2024-04-02
  • Delphi中的事件处理机制是什么
    Delphi中的事件处理机制是一种基于观察者模式的设计模式,通过事件来实现对象之间的松耦合通信。在Delphi中,事件是一种特殊类型...
    99+
    2024-03-13
    Delphi
  • Node.js中事件循环的机制是什么
    本篇内容介绍了“Node.js中事件循环的机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先看一个demo:setTimeout((...
    99+
    2023-06-17
  • Java中的事件监听机制是什么
    这篇文章给大家介绍Java中的事件监听机制是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。鼠标事件监听机制的三个方面:1.事件源对象:事件源对象就是能够产生动作的对象。在Java语言中所有的容器组件和元素组件都是事...
    99+
    2023-05-31
    java 事件监听机制 ava
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作