首页 > js中的事件监听是谁在监听,浏览器,还是操作系统?

js中的事件监听是谁在监听,浏览器,还是操作系统?

事件监听是怎么做到的,他们怎么知道我点击了某个按钮,或者输入了一些内容?是采用一个while循环的方式吗?


我来强答一下,有错误请指出

以鼠标的mousedown事件为例:

  1. 当你点击鼠标左键时,鼠标引起CPU的一个硬件中断。

  2. 中断处理程序将会调用操作系统预先设置好的代码,应该是鼠标驱动。

  3. 鼠标驱动通知操作系统的GUI系统发生了一个鼠标按下事件,包括光标坐标。

  4. GUI系统发现当前激活窗口是浏览器的,于是通知浏览器进程一个鼠标按下的消息。

  5. 浏览器收到通知后,找到光标对应的坐标处的标签页,这个标签页中的JS环境,把消息封装成一个MouseDownEvent对象,将对事件处理相关的代码(称为一个任务)推入事件队列排队。等到事件队列前面的任务都执行完了,就会执行该任务,于是对应的事件处理器函数被调用。

我操作系统的知识水平有限,但是整体上应该是一个从底层到顶层、从硬件到软件的过程。至于你说是不是循环,确实是的。

另:既然提到了Event Loop,那么我就不失时机地安利一下我之前的一篇关于Event Loop文章。


@manxisuo 的答案从硬件到操作系统再到浏览器的角度阐释了一个事件是怎么产生的,不过既然题主提到了 while 循环,可以看一下 JavaScript Event Loop 这方面的知识,应该会在语言层面有更深层次的认识。

【热门文章】
【热门文章】