Функция высшего порядка — это функция, которая принимает другую функцию в качестве аргумента и возвращает новую функцию. Утилита once гарантирует, что обёрнутая функция выполняется только при первом вызове, возвращая кэшированный результат при всех последующих вызовах.
function once(fn) {
let called = false;
let result;
return function (...args) {
if (!called) {
called = true;
result = fn.apply(this, args);
}
return result;
};
}
called — флаг, который отслеживает, была ли функция уже вызванаresult — хранит возвращаемое значение от первого выполнения...args — rest-параметры передают все аргументы исходной функцииfn.apply(this, args) — вызывает исходную функцию, сохраняя правильный контекст thiscalled равен false, поэтому исходная функция выполняется, её результат кэшируется, а called устанавливается в trueconst initialize = once(() => {
console.log("Initialized!");
return 42;
});
initialize(); // выводит "Initialized!", возвращает 42
initialize(); // возвращает 42 (без вывода)
initialize(); // возвращает 42 (без вывода)
called и result между вызовамиФункция once использует замыкание для сохранения состояния, позволяя флагу called и переменной result сохраняться между отдельными вызовами возвращаемой функции-обёртки.
Новый — ещё не проверен сообществом
Вы