evento é uma variável global acessível em qualquer lugar da cadeia de retorno de chamad

Eu estava brincando com ouvintes de eventos com DOM e javascript e percebi o seguinte:

function chained(msg) {
    console.log(msg, event);
}

function onClick() {
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

Agora o engraçado ... isso vai gerar:

"o corpo foi clicado, (MouseEvent)"

Então eu pergunto, por quê? como ele passa o objeto de evento sem enviá-lo nochained ligar

function chained(msg) {
    console.log(msg, namedEventObj); //throw error namedEventObj is not defined
}

function onClick(namedEventObj) {
    console.log(event); //outputs (MouseEvent);
    console.log(nameEventObj); //outputs (MouseEvent);
    chained('the body was clicked');
}

document.body.addEventListener('click', onClick);

Mesmo se eu declarar que o objeto de evento será passado noonClick funciona comonamedEventObj estará disponível apenas paraonClick mas não parachainedunção @ ... eu consegui isso e isso faz sentido para mim ... mas definitivamente não é oeventariável @ para estar disponível para ochained função.

Alguém sabe por que se comporta assim?

A única coisa em que consigo pensar é que esse evento é de fatowindow.event e se torna disponível quando algum evento é despachado e Event ... mas isso significa que qualquer elemento pode obter essas informações de evento se chamado ao mesmo tempo que o evento em que é disparado?

Estou usando o Chrome 11.0.x

questionAnswers(1)

yourAnswerToTheQuestion