捕获与冒泡

原文(来自Winter-《重学前端》):

很多文章会讲到捕获过程是从外向内,冒泡过程是从内向外(或者捕获从上到下,冒泡从下到上),但是这里我希望讲清楚,为什么会有捕获过程和冒泡过程。我们刚提到,实际上点击事件来自触摸屏或者鼠标,鼠标点击并没有位置信息,但是一般操作系统会根据位移的累积计算出来,跟触摸屏一样,提供一个坐标给浏览器。那么,把这个坐标转换为具体的元素上事件的过程,就是捕获过程了。而冒泡过程,则是符合人类理解逻辑的:当你按电视机开关时,你也按到了电视机。所以我们可以认为,捕获是计算机处理事件的逻辑,而冒泡是人类处理事件的逻辑。

大概就是如下图那么个意思:

电脑屏幕就好比这么张桌子,div父子级的嵌套就好比桌子上有一叠物品,笔记本叠在字典上,闹钟叠在笔记本上;
在这里插入图片描述
捕获:从外向内,或者从上到下响应
当我们手指触碰闹钟的时候,同时,你间接地触碰了笔记本和字典。而对于书桌来说,这三个物品是在同一个地方,同一个坐标点。

  1. 触碰了闹钟时,依次触碰了闹钟->笔记本->字典->桌面
  2. 但是当触碰笔记本的时,闹钟是不会被触碰的根据(根据从外向内,或者从上到下规则);所以触碰笔记本,依次触碰了笔记本->字典->桌面

冒泡:从内向外,或者从下到上响应;
假设每个物品都有触碰函数,触碰一次就会闪一次光;闹钟(红光),笔记本(黄光),字典(蓝光),桌面(绿光);

  1. 如果触碰闹钟,依次发出:绿->蓝->黄->红光
  2. 触碰笔记本,根据从下到上的原则,闹钟是在笔记本上面,所以触碰笔记本的时候并没有触碰闹钟。那么只会发出:绿->蓝->黄光

阻止冒泡:event.stopPropagation();或者return false;
相当于在触碰的时候,我们人工给物品下层绝缘了;
比如我们给笔记本的点击函数设置了return false;那么笔记本和字典的联系就断了,断电,那么当我们触碰闹钟的时候,下层的字典神经麻木没有触摸感,只会发出:黄光;字典以下的物品(桌面)就不会再发光!