Если вы не можете понять бегущий механизм языка JavaScript или просто поставить, вы не можете освоить порядок выполнения JavaScript, то вы похожи на болу, который не может контролировать лошадь в тысячу миль, позволяя тысяче мильной лошади сбежать и бежать вокруг.
Так как же JavaScript Parse? Каков его заказ на выполнение? Прежде чем мы это поймем, давайте впервые поймем несколько важных терминов:
1. Кодовый блок
Кодовый блок в JavaScript относится к сегменту кода, разделенному на тег <cropript>. Например:
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Alert («Это кодовой блок One»);
</script>
<script type = "text/javascript">
оповещение («Это код Блок два»);
</script>
JS компилируется и выполняется в соответствии с блоками кода. Что это значит?
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Alert (str); // Поскольку STR не определен, браузер будет иметь ошибку, а следующее не может работать
Alert ("I Am Im Code Block One"); // не работаю здесь
var test = "I - переменная блока кода";
</script>
<script type = "text/javascript">
Alert («I Am Code Block Two»);
Alert (тест);
</script>
В приведенном выше коде в кодовом блоке сообщается об ошибке, но она не влияет на выполнение кодового блока второго. -Болока.
2. декларативные функции и функции назначения
Определения функций в JS разделены на два типа: декларативные функции и функции назначения.
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Функция fn () {// Объявление функции
}
var fn = function {// функция назначения
}
</script>
Разница между декларативной функцией и функцией присвоения заключается в том, что в течение периода предварительного сбора JS декларативная функция будет извлечена сначала, а затем код JS будет выполнен по порядку.
3. Период предварительного спуска и период исполнения
Фактически, процесс анализа JS делится на два этапа: период предварительного считывания (предварительная обработка) и период выполнения.
В течение периода предварительного спуска JS будет обрабатывать все объявленные переменные и функции в этом блоке кода (аналогично компиляции C), но следует отметить, что в настоящее время единственное, что обрабатывает функции, является декларативным, а переменные - это только объявлено.
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Fn ();
Функция fn () {// Функция 1
оповещение («функция 1 была выполнена»);
}
Функция fn () {// Функция 2
оповещение («функция 2 была выполнена»);
}
</script>
<script type = "text/javascript">
Fn ();
Функция fn () {// Объявление функции
оповещение («объявленная функция выполнена»);
}
var fn = function () {// функция назначения
alert ("выполнить функцию назначения");
}
</script>
// код блока один
<script type = "text/javascript">
Alert (str); // Ошибка браузера сообщила, но информационное окно не появилось
</script>
// код Блок два
<script type = "text/javascript">
оповещение (Str);
var str = "aaa";
</script>
// JS объявляет переменную в течение периода предварительной обработки, но не инициализирует и не назначает значения, поэтому переменная в кодовом блоке 2 является незабываемой, в то время как переменная в коде вообще не существует, поэтому браузер сообщает об ошибке.
Понимая вышеупомянутые термины, я считаю, что у вас есть грубое впечатление от механизма бега JS.
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
Fn ();
</script>
<script type = "text/javascript">
Функция fn () {// Функция 1
оповещение («функция 1 была выполнена»);
}
</script>
Почему браузер сообщает об ошибке при запуске вышеуказанного кода? Разве функция объявления не обрабатывается в течение периода предварительной обработки? Фактически, это недопонимание. Код.
Теперь давайте обобщу и организуем:
Кода -копия выглядит следующим образом:
Шаг 1. Прочитайте первый блок кода.
Шаг 2. Сделайте синтаксический анализ.
Шаг 3. Сделайте «обработку предварительной комплектации» переменных VAR и определений функций (никогда не будет сообщена ошибка, потому что только правильное объявление проанализировано).
Шаг 4. Выполните сегмент кода, и если есть какие -либо ошибки, сообщается об ошибке (например, переменная не определена).
Шаг 5. Если есть другой сегмент кода, прочитайте следующий сегмент кода и повторите шаг2.
Шаг 6.
В соответствии с порядок выполнения потоков документов HTML, код JS, который необходимо выполнить, перед рендерингом элементов страницы, должен быть размещен в блоке кода <Script> до <body>, а JS после загрузки элементов страницы следует размещать В </body> после элемента событие нагрузки тега тела выполняется в конце.
Кода -копия выглядит следующим образом:
<script type = "text/javascript">
оповещение («первое»);
функция fn () {
оповещение ("третий");
}
</script>
<body onload = "fn ()">
</body>
<script type = "text/javascript">
оповещение ("второе");
</script>