Eso es porque "lope" es una función, las funciones se pueden llamar con o sin parametros.
Defines la función:
var lope = function(uno, dos, tres, cuatro) {
};
Puedes hacer:
lope(); // uno ,dos, tres, cuatro = undefined
lope(a); // uno = a, dos,tres,cuatro = undefined
lope(a, b, c, d); // uno = a, dos = b, tres = c, cuatro = d
También puedes declarar una función lambda:
c.addEventListener("mousedown", function(event) { /* hacer cosas */ } ,false)
No puedes hacer sin embargo :
c.addEventListener("mousedown", lope() , false)
A no ser, que la función lope te devuelva otra función.
Aquí lo que haces es:
Cuando ocurra el e vento "mousedown" llama al a función "lope".
En el evento mousedown del browser habrá algo así :
function mousedown(listener) { // listener es tu "lope"
var mouseEvent= { /* algo */};
if (listener) {
try { listener(mouseEvent); } catch (err) { /*... */ }
}
}
Cuando mousedown se ejecuta, llama a esa funcion, con un parametro "MouseEvent", y el contenido pues depende del navegador.
Si quieres saber que tiene el objeto que te pasan por parametro:
Abres la consola de chrome, y pones un breakpoint en tu código, y lo verás en los watch.
Otra forma es :
if (typeof(console) != 'undefined') { console.log(event); }