Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: arrow function, hoisting, scope, functional component, temporal dead zone

Если внутри функционального компонента объявить стрелочную функцию ниже места её вызова — сработает ли это? Почему?

Проверяет понимание области видимости и hoisting стрелочных функций в JavaScript, а также их отличие от обычных функций.

Короткий ответ

Нет, не сработает. Стрелочные функции не подвержены hoisting'у, в отличие от обычных функций. Они ведут себя как переменные, объявленные через const или let, и находятся во временной мёртвой зоне до момента инициализации. Поэтому вызов до объявления приведёт к ошибке ReferenceError.

Длинный ответ

Почему стрелочную функцию нельзя вызвать до её объявления?

В JavaScript существует механизм hoisting (поднятие), который перемещает объявления переменных и функций в начало их области видимости. Однако для стрелочных функций, объявленных через const или let, hoisting работает иначе: они не инициализируются до момента выполнения строки с объявлением. До этого момента переменная находится во временной мёртвой зоне (Temporal Dead Zone, TDZ).

Пример с функциональным компонентом React

function MyComponent() {
  // Ошибка: Cannot access 'handleClick' before initialization
  handleClick();

  const handleClick = () => {
    console.log('Clicked');
  };

  return <div>Hello</div>;
}

В этом примере вызов handleClick() происходит до того, как переменная handleClick была инициализирована. JavaScript видит объявление const handleClick, но не позволяет обратиться к ней до завершения инициализации. В результате возникает ReferenceError.

Как это отличается от обычных функций?

Обычные функции, объявленные через function declaration, полностью поднимаются (hoist) вместе с телом. Их можно вызывать до строки объявления:

function MyComponent() {
  handleClick(); // Работает без ошибок

  function handleClick() {
    console.log('Clicked');
  }

  return <div>Hello</div>;
}

Практический вывод

В функциональных компонентах React стрелочные функции удобны для обработчиков событий, но их нужно объявлять до использования. Если требуется вызывать функцию до её объявления, используйте обычную функцию. В остальных случаях стрелочные функции предпочтительнее из-за лексического this и краткого синтаксиса.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#arrow function

#hoisting

#scope

#functional component

#temporal dead zone

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию