@letmesp

Как сделать функцию внутри функции, которая перемножает числа по порядку?

Как с помощью замыкания сделать так, чтобы функция внутри функции при вызове брала переменные по порядку и перемножала их с чем-нибудь.
Если переменные закончились, она при следующих вызовах должна начать с начала.
Я попробовал сделать, но не понимаю, как передавать переменные.

function myFunc(num) {
  let a = 5;
  let b = 6;
  let c = 9;
  return function() {
    return num * a;
  } 
}

const func = myFunc(2);
console.log(func(2)); //10
console.log(func(2)); //12
console.log(func(2)); //18
console.log(func(2)); //10

Была идея сделать счетчик, значение его будет меняться и в зависимости от этого брать нужные переменные. Не знаю, насколько не костыльное это решение, но оно работает.
  • Вопрос задан
  • 163 просмотра
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
function xxx(arr, val) {
  let index = -1;
  return () => val * arr[index = (index + 1) % arr.length];
}


const f = xxx([ 5, 6, 9 ], 2);
console.log([...Array(10)].map(f)) // [10, 12, 18, 10, 12, 18, 10, 12, 18, 10]

UPD. Вынесено из комментариев:

код до вложенной функции менять нельзя

Тогда так:

function xxx(num) {
  let a = 5;
  let b = 6;
  let c = 9;

  return function() {
    [ a, b, c ] = [ b, c, a ];
    return num * c;
  };
}
Ответ написан
WblCHA
@WblCHA
const initFunc = (nums) => {
	let i = 0;
  const { length } = nums;
  
  return (n) => n * nums[i++ % length];
}

const func = initFunc([5, 6, 9]);
console.log(func(2)); //10
console.log(func(2)); //12
console.log(func(2)); //18
console.log(func(2)); //10
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы