Diferencia entre asignar un controlador de eventos a un método con y sin paréntesis

Suponiendo que tiene lo siguiente:

function doStuff() { //code }

¿Cuál es la diferencia entre las 2 declaraciones?

window.onload = doStuff;

window.onload = doStuff();

Ambas declaraciones llamaron inmediatamente al método, pero si usé la primera declaración, podría tratar a la carga como un puntero de función a "doStuff" y volver a llamar al método usando:

onload();

¿Es esta la única diferencia y, en general, todo esto es un comportamiento garantizado para los manejadores de eventos?

Respuestas a la pregunta(3)

Su respuesta a la pregunta