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

Путаница о window.onload в javascript

У меня есть один абзац кода javascript. И я не очень хорошо это понимаю. Можете ли вы использовать его по строкам для меня? Большое спасибо.

 function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      oldonload();
      func();
    }
  }
}

И вот что я думаю:

 function addLoadEvent(func) { //define a function with a parameter 'func'
  var oldonload = window.onload; //assign window.onload event to variable oldonload
  if (typeof window.onload != 'function') { //if window.onload is not a function, then...
    window.onload = func; //assign 'func' to window.onload event. what does func mean?
  } else {             //if window.onlad is a function
    window.onload = function() {  //don't understand
      oldonload();  //call function oldonload()
      func();       //call function func()
    }
  }
}

Конфуции:

window.onload уже является событием, и почему мы используем typeof?

function addLoadEvent (func), window.onload = func, func(). Какая разница между этими функциями?

Прошу прощения за отправку проблемы с новичком. Но спасибо всем, кто дает мне какое-то руководство?

Edit:

Это улучшенный исходный код Саймона Уиллисона.

function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}
4b9b3361

Ответ 1

Это очень просто.

Вы проверяете, есть ли уже зарегистрированная функция загрузки.

если нет,  1. назначьте "func" функцию, которую вы передаете в onload

если он есть, создайте новую функцию onload, которая будет:

  • вызов старой функции onload
  • назовите свой "func", который вы передаете в

и

window.onload уже является событием, и почему мы используем typeof?

window.onload может быть функцией, но если один из них не установлен, это будет "undefined", мы должны проверить его тип, чтобы увидеть, что это такое.

function addLoadEvent (func), window.onload = func, func(). какой разница между этими функциями?

функции - это переменная в javascript. поэтому вы можете ссылаться на функцию как

FUNC

вы можете назвать его

FUNC()

в вашем случае: function addLoadEvent (func) - это текущая функция defintion. он принимает один параметр, и этот параметр должен быть функцией

window.onload = func назначает функцию, которую вы передали, в событие onload

FUNC()

вызывает функцию, которую вы передали в

здесь приведена строка за строкой:

function addLoadEvent(func) { //define a new function called addLoadEvent which takes in one param which should be function
  var oldonload = window.onload; //assign window.onload event to variable oldonload
  if (typeof window.onload != 'function') { //if window.onload is not a function,  and thus has never been defined before elsewhere
    window.onload = func; //assign 'func' to window.onload event. set the function you passed in as the onload function
  } else {             //if window.onlad is a function - thus already defined, we dont want to overwrite it so we will..
    window.onload = function() {  //define a new onload function that does the following:
      oldonload();  //do whatever the old onload function did
      func();       //and then do whatever your new passed in function does
    }
  }
}

//then call it like this: 
addLoadEvent(function() {
  alert("hi there");
});
addLoadEvent(function() {
  alert("this will be alerted after hi there");
});
//or like this:
var fn = function(){
 alert("this will be the last thing alerted");
};
addLoadEvent(fn);

Ответ 2

Можете ли вы использовать его по очереди для меня?

Я слишком ленив, но в двух словах:

  • Копировать нагрузку на другую переменную
  • Если onload, если функция, установите его в новую функцию, которая запускает переданную функцию, тогда старая функция
  • Если это не так, просто запустите переданную функцию runload

window.onload = func;//присваиваем 'func' событию window.onload. что означает func?

func - это переменная, определенная как первый аргумент функции (function addLoadEvent (func)). Функции - объекты первого класса в JavaScript - вы можете передавать их, как и любую другую переменную.

window.onload уже является событием, и почему мы используем typeof?

Это не событие. Это свойство, которое может быть функцией или undefined. Событие - это "что-то, что происходит", которое заставляет эту функцию запускаться.

function addLoadEvent (func), window.onload = func, func(). Какая разница между этими функциями?

Первая определяет функцию с именем addLoadEvent. Вторая назначает функцию func для onload. Третья функция вызывает функцию func.

В стороне, не используйте это. Используйте addEventListener/attachEvent или библиотеку, которая нормализует их во всех браузерах, таких как YUI или jQuery.

Ответ 3

Определенная функция addLoadEvent(func) предназначена для добавления дополнительной функции к уже существующему событию window.onLoad. Итак, первое, что он делает, это проверить, не является ли событие window.onLoad не функцией. Если нет, он просто присваивает переданную функцию событию window.onLoad.

Если, однако, window.onLoad уже определен, он сбрасывает его, чтобы вызвать исходную функцию onload, а также функцию, которую вы передали (func).

Вы бы использовали его так, чтобы добавить свое собственное событие в "стек":

addLoadEvent(function() {
  alert('Hello! I run after the original window.onload event if it exists!');
});

Это передает анонимную функцию функции addLoadEvent. Это то, что происходит в window.onload = function() { ... } в вашем коде выше. Вы также можете заранее определить функцию и передать ее так:

var myOnloadEvent = function() {
  alert('Hello! I run after the original window.onload event if it exists!');
};

addLoadEvent(myOnloadEvent);

Ответ 4

В javascript "функция" - это примитивный тип переменной, который может принимать переменная. Javascript также свободно набирается, поэтому значение переменной зависит от последней, которая была назначена ему. "event" - это только переменная-член объекта окна. Таким образом, вы можете назначить его по своему усмотрению. Если он никогда не был назначен ни на что, он примет примитивное значение "undefined" в javascipt. Таким образом, проверка:

if (typeof window.onload != 'function') {

проверяет, действительно ли обработчик события window.onload определен или нет.

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

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

Возможно, более значимым будет проверка:

if (typeof window.onload === 'undefined') {