@poniatowski

Как правильно в этой ситуации вызвать функцию из функции с учетом суммы?

Допустим, у нас есть нехитрая схема подсчета налогов. Мне нужно реализовать функцию, которая будет принимать на вход цену товара, затем будет высчитывать налог внутри, а затем мне нужно складывать эти суммы налогов. Я вызываю функцию пару раз с различными суммами, и каждый раз нужно вывести в консоль: сумма налогов: "столько то" рублей.
Мне понятен сам процесс расчета налогов, однако, не могу понять как сделать "накопление" = сумму всех налогов. Подозреваю, что надо использовать функцию в функции с счетчиком, но как именно, не могу понять.
https://repl.it/KvlL
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 3
SnaIP
@SnaIP
Front-end разработчик
Если правильно понял, то примерно так через замыкание...
Либо можно делать через статические свойства:
Cost.NameProperty = 0;

function Cost() {
    Cost.NameProperty++; // что-то подобное
}


function cost1() {
  let allAmount = 0;
  
  return function(tax) {
    let amount = tax * 0.2;
    allAmount += amount;
    console.log(`сумма налогов: ${allAmount} рублей`);
    return amount;
  }
}

cost = cost1();

cost(50);
cost(100);
cost(150);
cost(200);


На выходе:

сумма налогов: 10 рублей
сумма налогов: 30 рублей
сумма налогов: 60 рублей
сумма налогов: 100 рублей
Ответ написан
Комментировать
Ivanq
@Ivanq
Знаю php, js, html, css
function cost(tax) {
  let amount = tax * 0.2;
  console.log(`сумма налогов: ${amount} рублей`);
}

// тупо
cost(50) + cost(100) + cost(150);

// неплохо
let arr = [50, 100, 150];
let sum = 0;
let taxes = arr.forEach(item => sum += cost(item)); // в цикле по arr добавляем cost(item)

// круто
let sum = [50, 100, 150].reduce((sum, item) => sum + cost(item), 0);


reduce накапливает значения. 0 - начальное значение (let sum = 0;). В функцию подается накопленное значение (sum) и элемент массива (item). Возвращается новое накопленное значение (sum += cost(item)).
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
https://repl.it/KvlL/3

function cost() {
		var sum=0;
		
		return function(tax) {
			var amount = tax * 0.2;
			sum += amount;
			console.log('сумма налогов: '  + sum +  ' рублей');
			return sum;
		}
  
	}

var nalog= cost();
nalog(50);
nalog(100);
nalog(150);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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