function wrapper(func) {
let map = new Map();
return function(x) {
let result = func.apply(this, [x]);
if (map.has(x)) {
logResult(result, "factorial")
return map.get(x);
};
map.set(x, result);
logResult(result, "factorial")
return result;
}
};
function logResult(funcResult, funcName) {
console.log(`Результат ${funcName}: ${funcResult}`);
}
fac = wrapper(fac);
fac(5)
Замыкание — это комбинация функции и лексического окружения, в котором эта функция была определена. Другими словами, замыкание дает вам доступ к Scope внешней функции из внутренней функции. В JavaScript замыкания создаются каждый раз при созданиии функции, во время ее создания.