Возможно ли сделать так, чтобы в консоль выводилось первое вычисленное значение.
При этом нельзя изменять переменную data, должна остаться как определено ниже.
function getInc(inc) {
// решение
}
let data = getInc( (i) => { return ++i } )
console.log( data(10) ); //11
console.log( data(20) ); //11
console.log( data(30) ); //11
Ответ
Нужно просто сохранить первый результат в замыкании:
function getInc(inc) {
const NO_CALL_FLAG = Symbol();
let res = NO_CALL_FLAG;
return function(arg){
// если ещё не вычисляли, вычисляем и сохраняем в замыкании
return res === NO_CALL_FLAG ? res = inc(arg) : res;
};
}
let data = getInc( (i) => { return ++i })
console.log( data(10) ); //11
console.log( data(20) ); //11
console.log( data(30) ); //11
// ещё пример:
let twice = getInc(i => 2*i);
console.log(twice(5), twice(3)); // 10 10
Если нужна поддержка функций с количеством аргументов отличных от 1, достаточно оба arg заменить на ...args
Комментариев нет:
Отправить комментарий