Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我们应该考虑ADDVENETListEnter方法一个循环吗?_Javascript_Loops - Fatal编程技术网

Javascript 我们应该考虑ADDVENETListEnter方法一个循环吗?

Javascript 我们应该考虑ADDVENETListEnter方法一个循环吗?,javascript,loops,Javascript,Loops,据我所知,addEvenetListener方法通常只侦听某个事件,当触发该事件时,将调用回调函数来执行该回调函数中事件处理程序代码中的所有操作 addEventListener为每个触发特定事件的事件侦听。在我看来,它很像是由forEach()方法启动的for-each循环 我想我们至少可以说forEach()和addEvenetListener都是循环函数,尽管只是函数(方法)。据我所知,相对于2017年的常见JavaScript文献(MDN),我们不应该说它是一个循环,因为它不是JavaS

据我所知,
addEvenetListener
方法通常只侦听某个事件,当触发该事件时,将调用回调函数来执行该回调函数中事件处理程序代码中的所有操作

addEventListener
为每个触发特定事件的事件侦听。在我看来,它很像是由
forEach()
方法启动的for-each循环


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

据我所知,相对于2017年的常见JavaScript文献(MDN),我们不应该说它是一个循环,因为它不是JavaScript中定义的循环之一,比如
for
while
。我们确实可以说它是一个观察者,因为它观察其相关事件的每次触发


我们不会对集合中的每个项进行迭代,而是观察相关事件的每次触发;可以说,类似于“for each”的行为表明“存在漏洞”,我个人认为这一点没有任何缺陷。

addEventListener遵循著名的“不要打电话给我们,我们会打电话给你。”也被称为好莱坞原则

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

基本上,当您调用addEventListener进行回调时,比如说单击事件。它将调用JavaScript引擎的核心说

“嘿,我有一个函数,它希望在每次单击时都被调用。”

JavaScript引擎将存储对回调的引用。然后在JavaScript事件循环过程中,每次有一个click事件,它都会调用它的所有引用来回调

因此,循环确实发生在JavaScript事件循环中(您几乎无法控制)。但是您的回调函数是一个简单的函数,它订阅了一个特定的事件,并将在正确的时间被调用以响应该事件。这背后没有魔力


事实上,您的回调并不是真正在侦听事件,它只是将自己订阅一次特定事件,然后就完成了。它可能会在将来被调用,但它肯定不会积极地倾听它。

我想你要找的词是“迭代器”:)它不是迭代器。无论是
AddEventListener
还是传递给它的回调都没有实现这个协议。@FelixKling我说的是
forEach()
,具体来说,我应该澄清一下。除非你说的是
forEach()
不是迭代器?@Beau:我没说,但那是真的
forEach
是一个普通函数,而不是迭代器。正如我在前面的评论中所说的,迭代器是JavaScript()中一种非常特殊的对象,尽管我可以看到如何将代码>前缀 >作为一个更一般的意义上的迭代器()。哦,等等……“我们应该考虑ADDVENETListEnter方法一个循环吗?”绝对不是。函数本身不侦听事件。只有当你呼叫它时,它才会被呼叫。传递给它的回调(可能)会被反复调用,但不存在所谓的“循环函数”。它是一个事件监听器,简单明了。这个术语已经意味着每当事件发生时都会调用它。你可以认为它是一个观察者或订阅者,如果你更喜欢这些术语。@费利克林-我认为OP意味着听众本身是一个“循环”,意思是在背景中连续地听到事件的发生,以下面的代码< C >代码>语言构成。@ VSYNC:但是这也不正确。正在侦听的部分是浏览器内部的内容。该部分只调用handler。考虑<代码>(…){FoE();}。你会说
foo()
是一个“循环”,只是因为它是在循环中调用的吗?@FelixKling-OP可能知道它是浏览器内部的,这很明显它是内部的,但问题是监听器在幕后是如何工作的。也许这是某种时间间隔检查?你知道它是怎么听的吗?(我说的是
C
implementation)@vsync:它在内部如何实现并不重要。事件处理程序或订阅服务器是众所周知的高级概念,应该用来描述传递给
addEventListener
的函数。如果一开始就以实现的方式来命名,那是错误的,因为不同浏览器的实现可能不同。如果你想谈论具体的实现,我们必须看看具体的实现。