js,dom中事件监听+回调函数的理解
用现实中的人来做比喻,可以这么理解:
-
爸妈让我在家里看门,有人敲门就上去开门;
-
那么在这个例子中:爸妈就是程序员,我就是监听器,有人敲门就是事件,开门就是回调函数;
-
用编程的方式去解读就是:程序员针对某个事件设置了一个监听器,当事件被触发了就执行回调函数;
-
反过来就可以继续联想,事件是被触发的,在这里代指敲门的人,于是在编程世界中就有了事件的触发者,等等…
事件捕获和事件冒泡的理解
-
举个例子,我家今天着火了。
-
那么从我的角度看,就是在我家里发生了这件事,往外扩散,从小区保安的角度看,我们小区里发生了这件事,从省领导的角度来看,是湖北省中的某个地方发生了这件事,从新闻联播的角度看,是中国的某处地方发生了这件事。这就是事件冒泡。
-
反过来,新闻联播想知道我家发生了什么事,那么得从中国找到湖北省,再找到我的小区,再找到我家。这就是事件捕获。
-
以编程的方式解读就是:我作为监听器,那就是我家门口发生了敲门事件,小区保安作为监听器,那就是这个小区发生了敲门事件,依次往外推。那么我家发生敲门事件就会”冒泡“扩散出去;
-
反之事件捕获就像是找某个嫌疑犯一样,一步步缩小范围,最后捉拿归案
事件委托的理解
-
委托委托,将一件事委屈别人托付给别人,即为委托
-
那么在js中如何理解呢?
-
换个例子,每个家庭都有孩子,每个孩子都需要有人照看,在家里需要父母看着,但是在学校,只需要一个老师看着。
-
在js中也是这样:由于所有子元素的事件都会冒泡到同一个父级,那么我只需要给父级添加一个事件监听,即可让所有子级元素被监听到,而不需要给每个子元素都添加一个监听。
-
这样做会失去一些独立性,但是可以简化操作,适合使用在大量重复操作的地方。
编程世界中的知识几乎都可以在现实生活中找到原型