Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Функция должна сохранить массив передаваемых параметров (https://javascript.ru/forum/misc/84188-funkciya-dolzhna-sokhranit-massiv-peredavaemykh-parametrov.html)

NovichokJS 30.06.2022 19:28

Функция должна сохранить массив передаваемых параметров
 
Как сделать чтобы функция возвращала массив передаваемых другой функцией параметров в одном массиве?
У меня на выходе получается:
[ [ 1, 2 ] ]
[ [ 3, 4 ] ]
undefined


Код:

function saveCalls(obj) {
  const callsHistory = (arg1, arg2) => new Array([arg1, arg2]);
  return callsHistory;
}

// example 1
function sum(firstNum, secondNum) {
  return firstNum + secondNum;
}

const sumWithMemory = saveCalls(sum);

console.log(sumWithMemory(1, 2)); // ===> 3
console.log(sumWithMemory(3, 4)); // ===> 7

console.log(sumWithMemory.callsHistory); // ===> [ [1, 2], [3, 4] ]

рони 30.06.2022 19:45

NovichokJS,
:-?
function saveCalls(fun) {
  let callsHistory = [];
  const f =  (...arg) => {
  callsHistory.push(arg);
  return fun(...arg);
  };
  f.callsHistory = callsHistory;
  return f
}

// example 1
function sum(firstNum, secondNum) {
  return firstNum + secondNum;
}

const sumWithMemory = saveCalls(sum);

console.log(sumWithMemory(1, 2)); // ===> 3
console.log(sumWithMemory(3, 4)); // ===> 7

console.log(sumWithMemory.callsHistory); // ===> [ [1, 2], [3, 4] ]

NovichokJS 30.06.2022 20:06

круто, я думал что без слова this тут никак

NovichokJS 30.06.2022 20:11

просьба обяснить что значит выражение f.callsHistory = callsHistory;

рони 30.06.2022 20:17

Цитата:

Сообщение от NovichokJS
просьба обяснить что значит выражение f.callsHistory = callsHistory;

свойство функции f callsHistory будет ссылкой на массив c таким же названием callsHistory.
для понимания ...
function saveCalls(fun) {
  let arr = [];
  const f =  (...arg) => {
  arr.push(arg);
  return fun(...arg);
  };
  f.callsHistory = arr;
  return f
}

// example 1
function sum(firstNum, secondNum) {
  return firstNum + secondNum;
}

const sumWithMemory = saveCalls(sum);

console.log(sumWithMemory(1, 2)); // ===> 3
console.log(sumWithMemory(3, 4)); // ===> 7

console.log(sumWithMemory.callsHistory); // ===> [ [1, 2], [3, 4] ]

NovichokJS 30.06.2022 20:31

спасибо, понял. Не знал что там даже можно.


Часовой пояс GMT +3, время: 03:32.