据我了解,addEvenetListener
方法通常只会侦听某个事件,当触发该事件时,将调用回调函数来执行该回调函数中事件处理程序代码中的所有内容。 / p>
addEventListener
会在每次触发某个事件时听。对我而言,似乎非常类似于forEach()
方法启动的每个循环。
我认为我们至少可以说forEach()
和addEvenetListener
都是循环函数,但只是函数(方法)。
答案 0 :(得分:1)
Javascript addEventListener
跟随着名的“不要打电话给我们,我们会打电话给你”。也被称为好莱坞原则。
在软件工程中,它也称为发布者/观察者设计模式中的observer
或subscriber
部分。
基本上当你调用addEventListener时,让我们说带有回调的click事件。它将调用JavaScript引擎的核心
“嘿,我有一个想要在每次点击时被调用的功能。”
JavaScript引擎将存储对回调的引用。然后在JavaScript事件循环期间,每次有一个click事件时,它只是调用它对回调的所有引用。
所以循环确实发生在JavaScript事件循环中(你几乎无法控制)。但是你的回调是一个简单的函数,它订阅了一个特定的事件,并在适当的时候被调用以对这个事件作出反应。它背后没有任何魔力。
实际上,你的回调并不是真正在监听事件,它只是为特定事件订阅一次,然后就完成了。它可能在将来被调用,但它肯定不会主动倾听它。
答案 1 :(得分:0)
据我所知,关于2017年的常见JavaScript文献(MDN),我们不应该说它是一个循环,因为它不是像for
和{{{ 1}}。我们确实可以说它是一个观察者,因为每个触发相关事件的观察者都会这样做。
我们不对集合中的每个项目进行迭代,我们观察每次触发相关事件;可以说,“为每个”行为表示“循环”,我个人认为没有任何缺陷。