Поднятие функций в JavaScript

В предыдущем посте мы говорили о подъеме переменных. Теперь мы рассмотрим подъем функций в JavaScript.

В JavaScript существует два основных типа функций —

  • Объявления функций
  • функциональные выражения

В этой заметке мы разберемся, что такое хостинг функций, рассмотрев, как ведут себя объявления функций и выражения функций на этапе создания и выполнения.

**Подъемные объявления функций

Мы проанализируем приведенный ниже пример, чтобы понять, как поднимаются объявления функций.

В приведенном выше примере происходит следующее.

  • На этапе создания движок javascript встречает клавиатуру функции, и поведение по умолчанию таково, что когда встречается объявление функции, оно поднимается в память вместе с полным телом функции.
  • Когда начинается фаза выполнения и вызывается функция add, полное тело функции уже доступно в фазе выполнения, поэтому эта программа выводит 3.

**Подъем функциональных выражений

Способ поднятия функциональных выражений похож на то, как поднимаются переменные, поскольку функциональные выражения — это просто присвоение анонимной функции переменной, чтобы впоследствии мы могли выполнить ее, обратившись к имени переменной.

Из приведенных выше примеров можно сделать вывод, что подъем функциональных выражений происходит так же, как и подъем переменных.

  • В первом примере мы получаем ошибку add is not a function, так как переменная add была помещена в память со значением undefined, поэтому движок Js Engine ожидает, что add будет неопределенной, а не функцией, поэтому он выдает ошибку, если мы обратимся к ней до инициализации.
  • Во втором примере я заменил var на let, и он снова выдает ошибку, так как объявления let/const предоставляют память только на этапе создания, но не значение, что приводит к ошибке cannot access 'add' before initialisation.
  • Третий пример выводит ожидаемый результат, так как мы обращаемся к переменной add только после ее инициализации в программе out, поэтому переменная add инициализируется анонимной функцией и при ее вызове мы получаем результат 3.

Оцените статью
devanswers.ru
Добавить комментарий