Надеюсь, что кто-то найдет время, чтобы немного рассказать о функциях в функциях и области. Я пытаюсь понять немного больше о функциях и объеме переменных и нашел неплохой учебник, но этой части я просто не получаю.
Задача:
Создайте функцию, которая будет работать следующим образом: sum(a)(b) = a+b
и принимает любое количество скобок. Примеры:
sum(1)(2) == 3
sum(5)(-1)(2) == 6
Решение:
function sum(a) {
var sum = a;
function f(b){
sum += b;
return f;
}
f.toString = function() { return sum };
return f; //line 12
}
alert( sum(1)(2) ); // 3e
Объяснение:
Чтобы сделать sum(1)
вызываемым как sum(1)(2)
, он должен вернуть функцию.
Функция может быть вызвана или преобразована в число с помощью valueOf
.
Решение действительно самоочевидно:
Моя интерпретация:
Этот f
в function f(b)
возвращается в область видимости, начиная с строки 02-12.
f
в f.toString
, это текущий f
из function(b)
Следующий return f
возвращается к области, которая находится вне функции sum(a)
.
Проблема:
Я не могу понять, где мне нужно думать по-другому, потому что, как я описал выше, функция не будет вызываться снова, поэтому где же часть кода, которая делает возможным "несколько круглых скобок"?
Кроме того, правильно ли я предположил, где возвращаются f
? Было бы здорово, если бы кто-нибудь дал некоторые объяснения.