В ответах на этот вопрос мы читаем, что function f() {}
определяет имя локально, а [var] f = function() {}
определяет его глобально. Это имеет смысл для меня, но между этими двумя объявлениями есть странное поведение, отличающееся от других.
Я сделал HTML-страницу со скриптом
onload = function() {
alert("hello");
}
и все заработало как положено. Когда я изменил его на
function onload() {
alert("hello");
}
ничего не произошло. (Firefox все еще запускал событие, но WebKit, Opera и Internet Explorer этого не сделали, хотя, честно говоря, я понятия не имею, что является правильным.)
В обоих случаях (во всех браузерах) я мог убедиться, что функции window.onload
и onload
были установлены. В обоих случаях глобальный объект this
устанавливается в окно, и, независимо от того, как я пишу объявление, объект window
получает свойство просто отлично.
Что здесь происходит? Почему одна декларация отличается от другой? Является ли это причудой языка JavaScript, DOM или взаимодействия между ними?