Как объявить функции
Обычно есть два способа объявить функцию:
foo () {}; // Объявление функции var foo = function () {}; // Функция выраженияРазница
1. Выражение функции может быть выполнено непосредственно с помощью скобков после этого
2. Объявление функции будет предварительно оформлено заранее
Предварительный анализ
Давайте сначала посмотрим на пример:
foo (); // Объявление функции foo_later (); // foo_later - это не функциональная функция foo () {console.log ('Объявление функции'); } var foo_later = function () {console.log ('function Expression'); }Как видите, объявление функции Foo готовится, и его можно выполнить до своего собственного кода; Функция выражения foo_later не может. Чтобы решить эту проблему, мы должны сначала выяснить рабочий механизм анализатора JavaScript.
Переменная повышение (подъем)
Парсер JavaScript будет поднимать переменные и объявления функций в своем собственном объеме. То есть приведенный выше пример фактически понимается и проанализируется парсером в следующую форму:
function foo () {console.log ('declaration' функция '); } // Все объявления функций являются продвинутыми var foo_later; // выражения функций (объявления переменных) только продвигают переменные, а операция назначения не является продвинутой foo (); foo_later (); foo_later = function () {console.log ('function Expression'); }Это также может объяснить, почему вызов функции до того, как выражение функции вернет ошибку, поскольку она еще не была назначена, это просто неопределенная переменная и, конечно, не может быть выполнена.
Точно так же мы также можем попытаться угадать вывод следующего кода:
console.log (DecledLater); var decladlater = "Теперь это определено!"; console.log (DecledLater);
Этот код может быть проанализирован в следующую форму:
var объявил; console.log (DecledLater); // undefineddeclaredLater = "Теперь это определено!"; console.log (DecledLater); // Теперь это определено!
Объявление переменной упоминается первым (поэтому не сообщается об ошибке в переменной), но назначение не является продвинутым, поэтому результат первого вывода не определен.
Следует отметить, что
Поскольку объявления функций подготовлены, не используйте этот метод для объявления различных функций. Попробуйте угадать вывод следующего примера:
if (true) {function aaa () {alert ('1'); }} else {function aaa () {alert ('2'); }} aaa ();В отличие от того, что мы ожидали, код появляется с «2». Это связано с тем, что объявления о двух функциях предварительно переписываются до выполнения оператора IF, поэтому оператор IF вообще бесполезен. Когда AAA () вызывается, следующая функция выполняется напрямую.
Суммировать
Через приведенное выше объяснение мы можем подвести итоги его следующим образом:
• Объявление переменной выдвигается на вершине сфера действия, а назначение остается на месте
• Объявление функции всего "до"
• Когда функция присваивается переменной в качестве значения, только переменная является «расширенной», а функция не является «продвинутой».
Испытайте это больше, практикуя приведенные выше примеры. Кроме того, в качестве наилучшей практики: объявления переменных должны быть размещены в верхней части объема/функции (JavaScript имеет только объем функций!).
Вышеупомянутая статья полностью понимает объявления функций, выражения функций и улучшение переменных - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.