@Rubix
Люблю кодить, разрабатываю проекты в разных сферах

Обязательно ли перед onload обращаться к window?

Для выполнения кода после загрузки dom нужно написать window.onload = () => { /*код*/ } в скрипте, либо добавить аргумент defer в теге его подключения. В первом случае, обязательно ли обращаться к объекту window, если можно без него? Если это происходит в каком-то другом контексте, то это да. Но вот когда это делается в основном контексте, даже если написать просто onload = ..., то обращение происходит к window по умолчанию. То же самое я видел с window.location, window.navigator и что-то там еще. Зачем так делать, это такой стандарт?
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
Stalker_RED
@Stalker_RED
Не обязательно, скорее всего сработает и так (но это не точно).

На странице window - это глобальный контекст, то есть если вы напишете просто location.reload() то браузер поищет свойство location по областям видимости "снизу вверх" и скорее всего найдет тот, что в объекте window.

В случае с onload - это свойство есть не только у window, но и у всех изображений, у iframe, скриптов.
Добавление window как минимум добавит читаемости коду, а в некоторых случаях может уберечь от поиска "загадочных" глюков.

Для выполнения кода после загрузки dom нужно написать

да нет, не нужно. В смысле, не обязательно писать именно так, даже лучше делать по другому. Кроме стобытия load есть еще DOMContentLoaded.

Событие DOMContentLoaded – DOM готов, так что обработчик может искать DOM-узлы и инициализировать интерфейс.
Событие load – внешние ресурсы были загружены, стили применены, размеры картинок известны и т.д. (то есть намного позже, чем DOMContentLoaded)


И даже если вам нужно именно load, то лучше написать не window.onload = ... а использовать
window.addEventListener('load', function() { ... })
это позволит вам использовать не один, а несколько подобных вызовов в разных местах. И вы не удалите ничей чужой говнокод типа onload = потому что такое объявление перезаписывает предыдущие вызовы.

А если еще немного копнуть, то возможно стоит определять "а что если страница УЖЕ загружена, и событие load больше не произойдет, и мой код вообще никогда не выполнится?" и проверять readyState, или типа того.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
raf_gal
@raf_gal
да
к свойствам обьекта окна можно обращаться напрямую
это главный глобальный обьект среды исполнения

и например обьект документ это свойства окна
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы