Skip to content

Commit f0f287a

Browse files
committed
1-js/06-advanced-functions/06-function-object/5-sum-many-brackets
1 parent 055ec29 commit f0f287a

2 files changed

Lines changed: 15 additions & 15 deletions

File tree

1-js/06-advanced-functions/06-function-object/5-sum-many-brackets/solution.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11

2-
1. For the whole thing to work *anyhow*, the result of `sum` must be function.
3-
2. That function must keep in memory the current value between calls.
4-
3. According to the task, the function must become the number when used in `==`. Functions are objects, so the conversion happens as described in the chapter <info:object-toprimitive>, and we can provide our own method that returns the number.
2+
1. В общем, чтобы это *хоть как-нибудь* заработало результат, возвращаемый `sum`, должен быть функцией.
3+
2. Между вызовами эта функция должна удерживать в памяти текущее значение счётчика.
4+
3. Согласно заданию, функция должна преобразовываться в число когда она используется в операции `==`. Функции -- объекты, так что преобразование происходит как описано в главе <info:object-toprimitive>, и мы можем предоставить наш собственный метод, возвращающий число.
55

6-
Now the code:
6+
Код:
77

88
```js run
99
function sum(a) {
@@ -28,28 +28,28 @@ alert( sum(6)(-1)(-2)(-3) ); // 0
2828
alert( sum(0)(1)(2)(3)(4)(5) ); // 15
2929
```
3030

31-
Please note that the `sum` function actually works only once. It returns function `f`.
31+
Пожалуйста, обратите внимание на то, что функция `sum` выполняется лишь однажды, и просто возвращает функцию `f`.
3232

33-
Then, on each subsequent call, `f` adds its parameter to the sum `currentSum`, and returns itself.
33+
Далее, при каждом последующем вызове, `f` суммирует свой аргумент со значением `currentSum` и возвращает себя же.
3434

35-
**There is no recursion in the last line of `f`.**
35+
**В последней строке `f` нет никакой рекурсии.**
3636

37-
Here is what recursion looks like:
37+
Вот как выглядит рекурсия:
3838

3939
```js
4040
function f(b) {
4141
currentSum += b;
42-
return f(); // <-- recursive call
42+
return f(); // <-- рекурсивный вызов
4343
}
4444
```
4545

46-
And in our case, we just return the function, without calling it:
46+
В нашем случае мы просто возвращаем функцию, не вызывая ее:
4747

4848
```js
4949
function f(b) {
5050
currentSum += b;
51-
return f; // <-- does not call itself, returns itself
51+
return f; // <-- не вызывает себя. Просто возвращает
5252
}
5353
```
5454

55-
This `f` will be used in the next call, again return itself, so many times as needed. Then, when used as a number or a string -- the `toString` returns the `currentSum`. We could also use `Symbol.toPrimitive` or `valueOf` here for the conversion.
55+
Функция `f` будет использоваться в последующем вызове, и снова возвращать себя столько раз, сколько будет необходимо. Затем, при использовании в качестве числа или строки, метод `toString` возвращает `currentSum` -- число. Также здесь мы можем использовать `Symbol.toPrimitive` или `valueOf` для преобразования.

1-js/06-advanced-functions/06-function-object/5-sum-many-brackets/task.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ importance: 2
22

33
---
44

5-
# Sum with an arbitrary amount of brackets
5+
# Сумма с произвольным количеством скобок
66

7-
Write function `sum` that would work like this:
7+
Напишите функцию `sum`, которая бы работала следующим образом:
88

99
```js
1010
sum(1)(2) == 3; // 1 + 2
@@ -14,4 +14,4 @@ sum(6)(-1)(-2)(-3) == 0
1414
sum(0)(1)(2)(3)(4)(5) == 15
1515
```
1616

17-
P.S. Hint: you may need to setup custom object to primitive conversion for your function.
17+
P.S. Подсказка: возможно вам стоит настроить пользовательский объект вашей функции для примитивного преобразования.

0 commit comments

Comments
 (0)