> Как реализовать функцию-обертку runOnce в JavaScript, вызывающую функцию только один раз? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
В JavaScript функцию-обёртку runOnce можно реализовать с помощью замыкания. Она гарантирует, что переданная функция выполнится только один раз, а при последующих вызовах будет возвращать результат первого вызова (или undefined, если результат не нужен).
JAVASCRIPTfunction runOnce(fn) {let executed = false;let result;return function(...args) {if (!executed) {executed = true;result = fn.apply(this, args);}return result;};}// Пример использованияconst initialize = runOnce(() => {console.log('Инициализация выполнена');return 42;});console.log(initialize()); // 'Инициализация выполнена', 42console.log(initialize()); // 42 (без повторного выполнения)console.log(initialize()); // 42
Как это работает:
- Внутренняя переменная
executedотслеживает, была ли функция вызвана. - При первом вызове
executedстановитсяtrue, результат сохраняется вresult. - Все последующие вызовы возвращают сохранённый
result, не выполняяfnповторно. - Использование
fn.apply(this, args)сохраняет контекстthisи переданные аргументы.
Этот паттерн часто применяется для однократной инициализации, подписки на события или выполнения дорогих операций.
> Похожие задачи по frontend
Что происходит с функцией в Map, пока на Map есть ссылка в JavaScript
Какие подводные камни есть при использовании ссылочных типов в JavaScript кроме сравнения
Какой числовой формат даты подходит для сравнения объектов Date в JavaScript
Почему garbage collector не очищает переменную в случае замыкания в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью