Страницы

Поиск по вопросам

пятница, 2 ноября 2018 г.

JS функция в качестве аргумента

Возможно ли сделать так, чтобы в консоль выводилось первое вычисленное значение. При этом нельзя изменять переменную 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

Комментариев нет:

Отправить комментарий