You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/06-advanced-functions/09-call-apply-decorators/article.md
+5-7Lines changed: 5 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,9 @@ JavaScript предоставляет исключительно гибкие в
6
6
7
7
Представим, что у нас есть функция `slow(x)`, выполняющая ресурсоёмкие вычисления, но возвращающая стабильные результаты. Другими словами, для одного и того же `x` она всегда возвращает один и тот же результат.
8
8
9
-
Если функция вызывается часто, то, вероятно, мы захотим кешировать (запомнить) возвращаемые ею результаты для соответствующих `x`, чтобы сэкономить время на повторных вычислениях.
9
+
Если функция вызывается часто, то, вероятно, мы захотим кешировать (запомнить) возвращаемые ею результаты, чтобы сэкономить время на повторных вычислениях.
10
10
11
-
Вместо того, чтобы усложнять `slow(x)` дополнительной функциональностью мы заключим её в функцию-обёртку - 'wrapper' (от англ. 'wrap' - обёртывать). Далее мы увидим, что в таком подходе масса преимуществ.
11
+
Вместо того, чтобы усложнять `slow(x)` дополнительной функциональностью мы заключим её в функцию-обёртку - "wrapper" (от англ. "wrap" - обёртывать), которая добавит кеширование. Далее мы увидим, что в таком подходе масса преимуществ.
12
12
13
13
Вот код с объяснениями:
14
14
@@ -23,8 +23,8 @@ function cachingDecorator(func) {
23
23
let cache =newMap();
24
24
25
25
returnfunction(x) {
26
-
if (cache.has(x)) { // если map содержит результат
Отделяя кеширующий код от основного кода, мы также сохраняем чистоту и простоту последнего.
51
51
52
-
Давайте погрузимся в детали того, как это работает.
53
-
54
52
Результат вызова `cachingDecorator(func)` является "обёрткой", т.е. `function(x)` "оборачивает" вызов `func(x)` в кеширующую логику:
55
53
56
54

57
55
58
-
Как мы видим обёртка возвращает результат выполнения `func(x)` "как есть". Из внешнего кода обёрнутая функция `slow` по-прежнему делает то же самое. Обёртка всего добавляет к её поведению аспект кеширования.
56
+
С точки зрения внешнего кода обёрнутая функция `slow` по-прежнему делает то же самое. Обёртка всего добавляет к её поведению аспект кеширования.
59
57
60
58
Подводя итог, можно выделить несколько преимуществ использования отдельной `cachingDecorator` вместо изменения кода самой `slow`:
0 commit comments