Skip to content

Commit c4c3017

Browse files
committed
up
1 parent 37fca27 commit c4c3017

File tree

2 files changed

+6
-8
lines changed

2 files changed

+6
-8
lines changed

1-js/06-advanced-functions/03-closure/8-make-army/lexenv-makearmy.svg

Lines changed: 1 addition & 1 deletion
Loading

1-js/06-advanced-functions/09-call-apply-decorators/article.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ JavaScript предоставляет исключительно гибкие в
66

77
Представим, что у нас есть функция `slow(x)`, выполняющая ресурсоёмкие вычисления, но возвращающая стабильные результаты. Другими словами, для одного и того же `x` она всегда возвращает один и тот же результат.
88

9-
Если функция вызывается часто, то, вероятно, мы захотим кешировать (запомнить) возвращаемые ею результаты для соответствующих `x`, чтобы сэкономить время на повторных вычислениях.
9+
Если функция вызывается часто, то, вероятно, мы захотим кешировать (запомнить) возвращаемые ею результаты, чтобы сэкономить время на повторных вычислениях.
1010

11-
Вместо того, чтобы усложнять `slow(x)` дополнительной функциональностью мы заключим её в функцию-обёртку - 'wrapper' (от англ. 'wrap' - обёртывать). Далее мы увидим, что в таком подходе масса преимуществ.
11+
Вместо того, чтобы усложнять `slow(x)` дополнительной функциональностью мы заключим её в функцию-обёртку - "wrapper" (от англ. "wrap" - обёртывать), которая добавит кеширование. Далее мы увидим, что в таком подходе масса преимуществ.
1212

1313
Вот код с объяснениями:
1414

@@ -23,8 +23,8 @@ function cachingDecorator(func) {
2323
let cache = new Map();
2424

2525
return function(x) {
26-
if (cache.has(x)) { // если map содержит результат
27-
return cache.get(x); // возвращаем его
26+
if (cache.has(x)) { // если кэш содержит такой x
27+
return cache.get(x); // читаем из него результат
2828
}
2929

3030
let result = func(x); // иначе, вызываем функцию
@@ -49,13 +49,11 @@ alert( "Again: " + slow(2) ); // возвращаем кеш
4949

5050
Отделяя кеширующий код от основного кода, мы также сохраняем чистоту и простоту последнего.
5151

52-
Давайте погрузимся в детали того, как это работает.
53-
5452
Результат вызова `cachingDecorator(func)` является "обёрткой", т.е. `function(x)` "оборачивает" вызов `func(x)` в кеширующую логику:
5553

5654
![](decorator-makecaching-wrapper.svg)
5755

58-
Как мы видим обёртка возвращает результат выполнения `func(x)` "как есть". Из внешнего кода обёрнутая функция `slow` по-прежнему делает то же самое. Обёртка всего добавляет к её поведению аспект кеширования.
56+
С точки зрения внешнего кода обёрнутая функция `slow` по-прежнему делает то же самое. Обёртка всего добавляет к её поведению аспект кеширования.
5957

6058
Подводя итог, можно выделить несколько преимуществ использования отдельной `cachingDecorator` вместо изменения кода самой `slow`:
6159

0 commit comments

Comments
 (0)