Нужна помощь в понимании функции мемуаризатора Крокфорда
Я пытаюсь понять функцию мемуаризатора Крокфорда. Хотя я могу проследить, как это работает, я не совсем понимаю, как это работает. основополагающий аргумент и внутренняя функция ракушка и как он придумал фундаментальная (оболочка, n); и функция (оболочка, n) {...} Я имею в виду, если бы я сам писал код, что привело бы меня к такому же выводу?
var memoizer = function (memo, fundamental) { var shell = function (n) { var result = memo[n]; if (typeof result !== 'number') { result = fundamental(shell, n); memo[n] = result; } return result; }; return shell; }; var fibonacci = memoizer([0, 1], function(shell, n) { return shell(n - 1) + shell(n - 2); });
Интуитивно я бы сделал что - то вроде:
function memoizer(memo, someFormula) { var shell = function() { // check memo // if not in memo // run the formula - someFormula(); // store result in memo // return result; return shell; } } var fibonacci = memoizer([0, 1], function(n) { // return fibonacci formula };
По общему признанию, это не рекурсивно, и я опустил н аргумент. Пока я это знаю ракушка и основополагающий это не одно и то же, меня смущает наложение и то, как они соотносятся друг с другом.
Что я уже пробовал:
Я использовал отладчик, поэтому понимаю, как он работает, но до сих пор не понимаю мотивов, лежащих в основе кода.
Graeme_Grant
Вы пытались связаться с автором? Мемуарист Дугласа Крокфорда · GitHub[^]- Он был бы самым подходящим человеком, чтобы ответить на этот вопрос...