Каков поток вызовов для этого сценария window.onload в JavaScript - PullRequest
0 голосов
/ 12 марта 2012

index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script src="Script1.js"></script>
    <script src="Script2.js"></script>
</head>
<body>

</body>
</html>

Script1.js

var Main;
window.onload = Main;

Script2.js

function Main() {
    alert("foo");
}

Если я выбрасываю точку останова @ var Main; и перебираю код в WebStorm, он выглядит так:

  1. Загрузить Script1.js.
  2. Загрузить Script2.js.
  3. Звоните Main().

Однако он не выполняет оператор alert("foo") в этой функции. Может кто-нибудь объяснить, что происходит более подробно?

  • ПРИМЕЧАНИЕ. Я понимаю, что вам следует избегать использования onload.
  • ПРИМЕЧАНИЕ. Я понимаю, что могу переупорядочить сценарии, и появится предупреждение.
  • ПРИМЕЧАНИЕ. Если я опущу оператор var Main;, описанный выше шаг 3 не будет выполнен.

Бонус: в WebStorm значение поля window.onload отображается как null, а значение Main - void. В чем разница между значением null и void?

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Поскольку Main - это пустое значение variable в этот момент в сценарии 1. window.onload по существу установлено на undefined. window.onload ожидает обратного вызова function вот так ...

var Main = function() { my_main_function() }
1 голос
/ 12 марта 2012

Содержимое Script1.js:

var Main; // declare but do not initialize a variable named "Main"
window.onload = Main; // sets the onload handler to that *undefined* variable

функция с именем Main просто никогда не вызывается.


Что касается бонусного вопроса: Какой смысл оператора void в JavaScript? и void @ MDC . TL; DR: void - оператор, который всегда возвращает undefined. Вы понимаете разницу между null и undefined?

...