Поясните код
Здравствуйте!
Еще вопрос по задачке из учебника: Создайте декоратор 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, время: 07:16. |