最近看代码时候遇到一点困惑,就是targetcurrentTarget的区别,所以记下来,好以后回顾。

MDN中target:一个触发事件的对象的引用,但事件处理程序在事件的冒泡或捕获阶段时被调用。
MDN中currentTarget:当事件遍历DOM时,标识事件的当前目标。它总是引用事件处理程序附加到的元素,而不是event.target,它标识事件发生的元素。

e.target可以用来实现事件委托,通过事件冒泡(捕获)给父元素添加事件监听。例子中, e.target指向用户点击的li,通过事件冒泡,li事件冒泡到ul,通过给ul添加事件达到每个li监听事件的效果,e.currentTarget指向绑定事件监听的那个对象ule.currentTarget === this返回truee.target===this返回false

当含有子元素的时候,e.target指的是触发事件的元素,可能是span也可能是li,此时的e.currentTarget指的是selector那个参数,也就是本例中的li。如果省略selector参数,那么它和addEventListenere.targete.currentTarget是一致的。

image
事件冒泡阶段,e.currenttargete.target是不相等的,但是在事件的目标阶段,e.currenttargete.target是相等的。

在本例中,事件的目标阶段即li,由于e.currentTarget始终指向添加监听事件的那个对象,即aLi[i],也就是HTML中的li,而e.target指向触发事件监听的那个对象,也是li,因此e.targete.currentTarget相等,同时也和this相等。

总结

e.target 指向触发事件监听的对象。
e.currentTarget 指向添加监听事件的对象。