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