一、绑定事件函数
    绑定事件的说法是不正确的,准确来说是绑定事件处理函数。
    事件会默认层层往上层dom节点传递。
    事件冒泡、事件绑定 - 图1

    1. let body = document.getElementsByTagName('body')[0];
    2. body.onclick = function(e){
    3. //w3c标准中e是传在事件处理函数中的,ie浏览器中,放在window.event中
    4. e = e || window.event
    5. //e为事件触发时,包含的相关信息与方法
    6. //MouseEvent为构造函数,mouseEvent为实例。
    7. console.log(e)
    8. //mouseEvent => MouseEvent.prototype => UIEvent.prototype => Event.prototype => Object.prototype
    9. //Event.prototype 里面有 stopPropagation方法,可以阻止冒泡。
    10. //mouseEvent里面有一个cancelBubble属性
    11. //根据w3c标准,可以调用e.stopPropogation来阻止冒泡,ie浏览器中,可以设置cancelBubble为true来实现
    12. if(e.stopProporgation){
    13. e.stopProporgation()
    14. }else{
    15. e.cancelBubble = true
    16. }
    17. }

    阻止冒泡的方法:
    (1)调用Event.prototype的stopPropogation方法 e.stopProporgation()
    (2)将事件对象的cancelBubble设置为true e.cancelBubble = true