为什么说Javascript是事务驱动的?举例快速理解

首先,事务驱动其实是一种代码模型,用于事件解耦的,具体可以搜索”事务驱动模型“。

简单来说是:

B一开始需要在特定地点,调用A里面的几个方法,B就需要在特定地点,调用a.func1(),a.func2()......,这是我们正常的逻辑。现在我们创造一个类Event,B只需要在特定地点给A传event对象,由event对象根据调用位置判断调用的是func1()还是func2()。

这就把逻辑从B转移到了event对象上。

我们知道Javascript是单线程、非阻塞式IO的,如果不清楚可以看我上一篇文章为什么说JS是阻塞 I/O的?简单举例告诉你什么是非阻塞 I/O!讲的很清楚了!

对比java、c++等语言,当你运行代码,代码读入内存中,按顺序从上往下执行所有代码。

但我们在写js的时候,经常会对标签元素绑定事件,这些代码也都读入内存中了,但没有马上执行,而是当你点击(对应click事件)、鼠标移动(对应mouse-move事件)时,调用该函数。

比如,放了一部电话在家里,但是电话要是没响,我们不会主动去「接电话」 (没人打来当然也无法主动接) ,这里电话响了就好比事件被触发,接电话就好比去做对应的事情。

电话响了(事件被触发) -> 接电话(去做对应的事)

我们称这种函数调用是异步的。其中,我们其实是把函数作为参数传给了EventTarget,此处的函数就是回调函数。

事件的绑定的两种方式

一、EventTarget.addEventListener(<name>,<func>,<isBool>)

「事件名称」、「事件的处理程序」(事件触发时执行的function),以及一个「Boolean」值,由这个Boolean决定事件是以「捕获」还是「冒泡」机制执行,若不指定则预设为「冒泡」。

二、EventTarget.xxxx = <func>

参考

JavaScript事件三部曲之事件机制的原理 - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值