javascript - 我们应该将 addEventListener 方法视为循环吗?

标签 javascript loops

据我了解,addEvenetListener方法通常只会监听某个事件,当该事件被触发时,将调用回调函数来执行该回调中事件处理程序代码中的所有内容功能。

addEventListener 监听特定事件的每次触发。对我来说,这似乎很像由 forEach() 方法启动的 foreach 循环。

我认为我们至少可以说 forEach()addEvenetListener 都是循环函数,尽管只是函数(方法)。

最佳答案

Javascript addEventListener 遵循著名的“不要调用我们,我们会调用你”。也称为好莱坞原则。

在软件工程中,它也称为观察者订阅者部分,如发布者/观察者设计模式中的那样。

基本上,当您调用 addEventListener 时,假设单击事件带有回调。它将调用 JavaScript 引擎的核心:

“嘿,我有一个函数,每次点击时都会调用它。”

JavaScript 引擎将存储对回调的引用。然后在 JavaScript 事件循环期间,每次发生点击事件时,它都会调用其所有回调引用。

所以循环确实发生在 JavaScript 事件循环内部(您几乎无法控制)。但是您的回调是一个简单的函数,它订阅了特定事件,并将在正确的时间调用以对该事件使用react。它的背后并没有什么魔法。

事实上,您的回调并不是真正监听事件,它只是订阅一次特定事件,然后就完成了。将来可能会调用它,但它肯定不会主动监听它。

关于javascript - 我们应该将 addEventListener 方法视为循环吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47070294/

相关文章:

c# - 可以将任意长度的参数数组转换为嵌套循环吗?

javascript - 在移相器 3 中更改场景的问题

javascript - 反序列化Json字典obj以显示多个值

c++ - 从运行多次的循环中获取输入 C++

php - 在特定条件下重做最后一个 foreach 循环命令

python - 嵌套的 For 循环,无法在没有 Catch 22 的情况下存储迭代

python - 在列表中向前移动元素

onClick 中的 Javascript setTimeout

javascript - 嵌套http.request AngularJS后同时显示数据

javascript - 我应该使用媒体查询并转换 : translateY(-%) to above the mobile keyboard?