点击上方“做工程师不做码农 ”,并“置顶公众号”
第一时间接收精彩文章
事件驱动是指JavaScript引擎并不是在看到代码之后就会立即执行,而是会在合适的时间才去执行。这个合适的时间是指当某个事件发生之后(例如一个输入框的内容发生了变化,这就是一个事件)。只有当相应的事件发生了之后,相应的操作才会执行,这就是事件驱动。 事件驱动在我们的日常生活中也是比较常见的一种模式。例如,银行的营业员处理业务就是一种事件驱动的模式,只有客户到来的时候才需要提供服务,客户到来就是一个事件。

事件驱动包含三个关键内容:事件、事主和处理方法。对于上述银行的例子来说,客户要办理的业务是事件,营业员是事主,而具体每项业务怎么办理就是处理方法。 例如,一个客户找到营业员甲办理存款业务,那么事件是存款,事主是营业员甲,处理方法是营业员具体办理存款的操作,而客户只是触发了这一事件。对于每个营业员来说,在上岗前都需要进行培训,培训在事件模型里就是绑定事件。例如,营业员甲负责存取款业务,营业员乙负责开户办卡业务,这就相当于营业员甲绑定了存取款事件,营业员乙绑定了开户办卡事件,对于没有绑定的事件是无法处理的,就像找营业员甲开户是不可以的。 另外,对于同一事件不同的营业员的处理方式也可能不一样,就像同样是开户,但是不同银行的营业员的开户方式可能就不一样。
在事件模型中,我们所要做的就是给需要处理事件的事主绑定处理方法,就像给营业员进行业务培训一样,绑定完事件之后,其他的事情就不需要我们参与了。虽然底层的实现不需要我们来参与,但是明白了底层的实现原理,可以让我们对事件驱动理解得更加深刻。

事件驱动模型在底层一般都是通过队列来实现的,这与在银行窗口前排队差不多。当发生一个事件时就会将其排入队列中,其中写清楚事件是什么、事主是谁,然后事件管理器定时查看队列,如果队列中有事件,那么事件管理器就会找跟事主相关的此类事件的处理方法,如果找不到,该事件就会被丢弃,如果找到就会执行相应的处理方法。 这跟银行的排队稍微有点区别,银行的排队是直接排在各自事主(营业员)前面,而事件驱动模型中所有的事件都排在一个队列里,这就像到银行办业务的人都排成一个长队(类似于取号排队,但是不分业务,全部排在一起的那种),然后大堂经理负责安排业务,排队的人需要告诉大堂经理准备到哪个窗口、办理什么业务。当然,直接按照银行的排队模型来实现从技术上来说并非不可以,而且在有的地方确实就是这么实现的,这只是业务和设计的问题。 另外,这里所说的只是原理,具体怎么实现还要看开发者是如何设计的,例如,也可以直接将事件处理方法的地址保存到队列中。

理解了事件模型,我们就能明白JavaScript中的代码虽然是用于描述怎么操作对象的,但是并不一定要立即操作对象。

全文完
访问带链接版请点击阅读原文
往期精彩回顾 MongoDB云数据库Atlas使用教程 实战:小程序云开发之云函数开发 实战:在小程序中获取用户所在城市信息 使用LeanCloud存储你的静态页面数据 小技巧|配置好用的Chrome DevTools 小技巧|同步你VSCode设置及扩展插件,换机不用愁! 虚拟DOM和实际的DOM有何不同? 小程序开发中的一些实践和踩坑 在Koa.js中实现文件上传的接口 Vue Function-based API RFC(中文) 当初设计 HTTPS 的需求是啥? 什么是高效率? 浏览器的线程和进程 IP、UDP和TCP的关系 前端要知道的HTTPS 前端要知道的RESTful API架构风格 10倍工作法之以终为始 小技巧|使用Vue.js的Mixins复用你的代码聚焦 大前端技术和 成长的公众号
关注我的公众号,第一时间接收原创、精选干货文章

点个在看少个 bug 👇
▼阅读原文排版更精美