window.onload не запускается для функции с именем onload - PullRequest
1 голос
/ 15 апреля 2019

Сегодня я столкнулся со странной проблемой:

window.onload, похоже, не срабатывает при обращении к функции с именем onload.

Я никогда раньше этого не замечал:

Тест 1 :

window.onload=onload;
function onload(){
  console.log('event fired');
}

Тест 2 :

window.onload=onload2;
function onload2(){
  console.log('event fired');
}

Почему не работает первый код?

Ответы [ 4 ]

0 голосов
/ 15 апреля 2019

Проблема здесь в том, что в веб-браузерах window устанавливается как глобальный объект.Это означает, что window.onload и onload ссылаются на одно и то же свойство.

console.log(window.onload === onload); // true

Итак, что вы по существу делаете, это

window.onload = window.onload;

, который ничего не меняет.

Если вам нужна функция сто же имя, вы можете поместить его в IIFE (или в любую функцию в этом отношении).В этом случае определенная вами функция не будет помещена в глобальную область и, следовательно, не будет конфликтовать с существующей window.onload.

(function() {
  window.onload = onload;

  function onload() {
    console.log('event fired');
  }
})();

Если вам необязательно указывать имя функции, вы можете, кроме изменения имени функции, также назначить функцию непосредственно onload следующим образом:

window.onload = function() {
  console.log('event fired');
};
0 голосов
/ 15 апреля 2019

Это происходит из-за объема. Если вы опустите window. во втором примере, , предупреждение все равно будет срабатывать . В первом примере вы перезаписываете функцию window.onload.

0 голосов
/ 15 апреля 2019

Если вы сделаете это таким образом, вы будете перезаписывать предопределенную функцию onload, созданную из javascript. Но если вы хотите дать имя функции загрузки вашей функции, вы можете сделать это следующим образом.

function onload() {
  alert("Page is loaded");
}
<!DOCTYPE html>
<html>
<body onload="onload()">

<h1>Hello World!</h1>

</body>
</html>
0 голосов
/ 15 апреля 2019

Onload - это предварительно определенная / встроенная функция JavaScript, которую вы не можете перезаписать. Это не работает.

...