¿Cómo pasar un evento como argumento a un controlador de eventos en línea en JavaScript?

// this e works
document.getElementById("p").oncontextmenu = function(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(target);
};

// this e is undefined
function doSomething(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;
    console.log(target);
}
<p id="p" onclick="doSomething(e)">
    <a href="#">foo</a>
    <span>bar</span>
</p>

Hay algunas preguntas similares que se han hecho.

Pero en mi código,Estoy tratando de obtener elementos secundarios a los que se ha hecho clic, comoa ospan.

Entonces, ¿cuál es la forma correcta de pasarevent como un argumento para el controlador de eventos, o cómo obtener eventos dentro del controlador sin pasar un argumento?

editar

Soy consciente deaddEventListener yjQuery, por favor proporcione una solución para pasar el evento ainline manejador de eventos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta