Является ли событие глобальной переменной, которая доступна везде внутри цепочки обратных вызовов? - PullRequest
24 голосов
/ 21 июня 2011

Я просто играл со слушателями событий с помощью DOM и javascript и заметил это:

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

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

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

Теперь забавная вещь ... это выдаст:

"тело щелкнуло, (MouseEvent) "

Тогда я спрашиваю, почему?как он передает объект события, не отправляя его при вызове chained?

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);

Даже если я объявлю событие obj для передачи функции onClick как namedEventObj, оно будет доступно толькодо onClick, но не до chained функции ... Я понял это, и это имеет для меня смысл ... но определенно не переменная event, которая будет доступна для функции chained.

Кто-нибудь знает, почему он так себя ведет?

Единственное, о чем я могу думать, это то, что событие на самом деле window.event и оно становится доступным, когда отправляется какое-то событие и событие ... но это будет означатьлюбой элемент может получить эту информацию о событии, если вызывается одновременно с событием, когда он запускается?

Я использую Chrome 11.0.x

1 Ответ

26 голосов
/ 21 июня 2011

Доступ к текущему событию можно получить через window.event.Просто использование event неявно вызывает window.event.

...