【问题标题】:How are all the events listeners in JavaScript kept active or alive?JavaScript 中的所有事件侦听器如何保持活动或活动状态?
【发布时间】:2019-05-30 10:33:12
【问题描述】:

我一直想知道,即使在您编写的 JavaScript 代码已被解析之后,JavaScript 中的事件处理程序如何始终监听后续操作以一次又一次地触发事件。 我试图在网上进行研究,但我没有找到任何资源来解释事件侦听器如何保持活跃或活跃。

我了解调用堆栈的工作原理,但我只想知道所有事件侦听器如何保持活动或活动状态。

例如,带有"click" 事件的addEventListener 将始终在单击按钮时运行指定的回调。那么addEventListener方法添加的回调是如何一直保持活跃或活跃的呢?

【问题讨论】:

  • 所以,您问的不是事件,而是处理程序,对吧?
  • 浏览器是一个巨大的软件。它所要做的就是记住事件目标和对处理函数的引用之间的关联。
  • @VLAZ 是的,我想知道每次触发事件时如何调用处理程序
  • This 可能会对您有所帮助。 this 也和你问的类似。

标签: javascript node.js event-handling addeventlistener dom-events


【解决方案1】:

JavaScript 的这种行为通常被描述为“事件循环”。 JavaScript 引擎运行、运行、运行并不断寻找新事件。它将一直运行,直到所有事件处理程序都被分离。现在,如果一个事件被触发,它将最终进入一个事件队列。然后某个时候事件循环将事件从队列中取出,并执行它。这将创建一个调用堆栈,如果展开,则循环继续。

【讨论】:

  • 我不确定这是否解决了 OP 的问题。这是正确,但 OP 似乎对事件侦听器本身的存储和执行方式感到困惑。
  • @vlaz 好吧,据我了解,他问“事件侦听器如何保持活动状态”,这基本上就是事件循环的用途。其他语言同步执行直到代码结束,所以 JS 可能会让人困惑……
  • 我的理解是OP感兴趣的是浏览器如何不过早地处理监听器。
  • 没错!事件处理程序每​​次是如何存储和执行的
  • 它们的存储和执行方式取决于引擎。
【解决方案2】:

JS 引擎将所有处理程序保存在内存中,附加到特定事件,它成为一个 JS 引擎来知道发生了什么事件以及附加到该事件的处理程序......希望这会有所帮助

【讨论】:

  • 这意味着处理程序和事件在执行后永远不会从内存中清除?
  • 耶,这就是 JS 人所说的事件循环
猜你喜欢
  • 2019-03-10
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多