【问题标题】:Javascript execution in browser在浏览器中执行 Javascript
【发布时间】:2016-06-24 21:19:24
【问题描述】:

这听起来可能很傻,但在过去的几天里让我很烦。我只是想弄清楚javascript是如何在浏览器中解释和执行的,尤其是在事件处理期间。假设我有两个基于同一元素的单击事件的函数。可能是为两个不同的类编写的两个不同的事件侦听器,并且同一个元素在单击期间具有这两个类。 js执行器先运行哪个函数?

解释器是在触发事件时解释完整的 js 文件,还是像在 Java 中那样使用解释期间生成的字节码,还是专门执行 x - x+y 行?

比起知道函数1是否会在函数2之前执行,反之亦然,我更好奇的是使用js注册和处理事件的整个过程背后的机制。

【问题讨论】:

  • @gurvinder372 兄弟,请参阅问题的编辑。我实际上可以通过触发控制台日志来找出执行顺序。我需要知道它背后的机制。无论如何,谢谢。

标签: javascript dom browser webbrowser-control


【解决方案1】:

我比较好奇整个过程背后的机制 使用js注册和处理事件。

将其视为一个队列,当您执行 element.addEventListener 时,事件被推送。

队列有一个属性 -> 先进先出

因此,哪个事件侦听器首先被添加到队列中(基本上由事件目标首先接收)将首先执行,直到它们都被执行。

注意:如果相同的事件处理方法是added more than once(与addEventListener相同的参数),那么旧的将被新的替换。

其次,当我们通过addEventListener 添加事件时,我们将specify a boolean value 称为-useCapture。如果该值为 true,则分配给父元素的事件首先触发,然后触发子元素,如果该值为 false,则反之亦然。

【讨论】:

  • 听起来很傻,解释器是在触发事件时解释完整的 js 文件,还是像在 Java 中那样使用解释期间生成的字节码,还是专门执行 x - x+y 行?
  • @KevinSunny does the interpreter interpret the complete js file on event being triggered 完整的 js 在加载 JS 时被解释,解释只加载功能,而不是执行。调用单个函数时会对其进行解释。
  • 好的...所以如果我有一个经常使用的函数,在一个很大的js文件中,如果我在开始编写函数有什么好处吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-18
  • 2016-12-07
  • 2017-04-04
  • 1970-01-01
  • 2011-06-12
相关资源
最近更新 更多