Реализовать once – функцию, которая принимает другую функцию, в качестве аргумента, и возвращает новую версию этой функции. Новая версия должна возвращать то же, что и оригинальная функция, но все последующие вызовы должны возвращать результат самого первого вызова. Пример:
let inc = a => a + 1;
let incOnce = once(inc);
let res1 = incOnce(42); //res1 is 43
let res2 = incOnce(77); //res2 is 43, NOT 78
Требования: 1. Не допустимы повторные вызовы функции-аргумента 2. Функция once должна корректно работать с функциями нескольких аргументов 3. Функция once должна корректно работать с методами 4. Функция once должна корректно работать с функциями, которые кидают исключения. В таких случаях, новая функция должна выбрасывать одно и то же исключение при всех последующих вызовах.
Написал пробный код, но счетчик не работает:
let counter = 0;
let firstCall;
let once = ()=>{
if (counter>1){
return firstCall
}
counter ++
firstCall = inc;
return inc
};
let inc =a=>a+1;
let incOnce = once(inc);
let res1 = incOnce(42);
let res2 = incOnce(77);
console.log(res1, res2); // выводит 43 и 78