Подтвердить что ты не робот

Является ли глобальная переменная глобальным значением, доступным повсюду внутри цепочки обратного вызова?

Я просто играл с прослушивателями событий с 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

4b9b3361

Ответ 1

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