js-study-part4-task4
by tigeral
HTML
<!--
Написать ф-цию factorial, которая бы кешировала уже вычисленные значения, и если на вход попадает аргумент, для которого уже есть закешированный результат - возвращать сразу из кеша без вычислений.
-->
JavaScript
var factorial = function () {
var cache = {};
return inner;
function inner(n) {
var result = cache[n] || assertIsNonNegativeInt(n);
if (!result) {
for (var i = result = 1; i <= n; i++) {
result *= i;
}
console.log('put ' + n + '! = ' + result + ' to cache');
cache[n] = result;
}
return result;
function assertIsNonNegativeInt(n) {
if (Number.isSafeInteger(n) && n >= 1) {
return 0;
} else {
throw TypeError('Parameter must be a non-negative integer number');
}
}
}
}();
console.log(factorial(1));
console.log(factorial(3));
console.log(factorial(3));
console.log(factorial(-3));