Поясните код
Здравствуйте!
Еще вопрос по задачке из учебника: Создайте декоратор makeCaching(f), который берет функцию f и возвращает обертку, которая кеширует её результаты. function f(arg) { return Math.random()*arg; // может быть любой функцией } function makeCaching(f) { /* ваш код */ } f = makeCaching(f); var a, b; a = f(1); b = f(1); alert( a == b ); // true (значение закешировано) b = f(2); alert( a == b ); // false, другой аргумент => другое значение Скажите, случайно в этой строчке нет ошибки? f = makeCaching(f); У нас есть функция f, потом мы еще ей же присваиваем функцию makeCaching, переопределяем f. Как-то закольцованно получается. Что-то я не могу до конца код догнать. |
Формально все правильно, хотя понятнее было бы, если первую строчку заменить на
var f = function(arg) { А что это за учебник? |
Тот что на этом сайте, раздел декораторы.
Спасибо. |
Цитата:
|
Цитата:
|
Цитата:
|
Гы, приведенное решение не совсем хорошее, вот:
function f(arg) { return arg.toUpperCase(); // может быть любой функцией } function makeCaching(f) { var cache = {}; return function(x) { if (!(x in cache)) { cache[x] = f.call(this, x); } return cache[x]; }; } f = makeCaching(f); alert( f("aaaa") ); // OK alert( f("toString") ); // Что-то не то :-( А вот если изменить проверку условия if (!(cache.hasOwnProperty(x))) { тогда все OK |
Часовой пояс GMT +3, время: 20:08. |