Javascript 在浏览器中执行
Javascript execution in browser
这听起来可能很傻,但在过去的几天里让我很烦。我只是想清楚地了解 javascript 在浏览器中是如何解释和执行的,尤其是在事件处理期间。假设我有两个基于同一个元素的点击事件的函数。可能是为两个不同的 类 编写的两个不同的事件侦听器,并且同一元素在单击期间同时具有这两个 类。 js执行器运行先执行哪个函数?
解释器是在触发事件时解释完整的 js 文件,还是像 Java 那样使用解释期间生成的字节码,或者专门执行 x - x+y 行?
与其说函数 1 会先于函数 2 执行,还是相反,我更好奇的是使用 js 注册和处理事件的整个过程背后的机制。
i am more curious about the mechanism behind the whole process of
registering and handling events using js.
将其视为一个队列,当您执行 element.addEventListener
.
时,事件会被推送到其中
队列有 属性 -> 先进先出。
所以,先加入队列的事件监听器(基本上是先被事件目标接收到的)先执行,直到全部执行完。
注意:如果相同的事件处理程序方法是 added more than once(与 addEventListener 的参数相同),则旧的将被新的替换。
其次,当我们通过 addEventListener
添加事件时,我们 specify a boolean value 调用了 - useCapture
。如果该值为 true,则分配给父元素的事件将首先触发,然后再触发子元素,如果该值为 false,则反之亦然。
这听起来可能很傻,但在过去的几天里让我很烦。我只是想清楚地了解 javascript 在浏览器中是如何解释和执行的,尤其是在事件处理期间。假设我有两个基于同一个元素的点击事件的函数。可能是为两个不同的 类 编写的两个不同的事件侦听器,并且同一元素在单击期间同时具有这两个 类。 js执行器运行先执行哪个函数?
解释器是在触发事件时解释完整的 js 文件,还是像 Java 那样使用解释期间生成的字节码,或者专门执行 x - x+y 行?
与其说函数 1 会先于函数 2 执行,还是相反,我更好奇的是使用 js 注册和处理事件的整个过程背后的机制。
i am more curious about the mechanism behind the whole process of registering and handling events using js.
将其视为一个队列,当您执行 element.addEventListener
.
队列有 属性 -> 先进先出。
所以,先加入队列的事件监听器(基本上是先被事件目标接收到的)先执行,直到全部执行完。
注意:如果相同的事件处理程序方法是 added more than once(与 addEventListener 的参数相同),则旧的将被新的替换。
其次,当我们通过 addEventListener
添加事件时,我们 specify a boolean value 调用了 - useCapture
。如果该值为 true,则分配给父元素的事件将首先触发,然后再触发子元素,如果该值为 false,则反之亦然。