Надеюсь, что кто-то найдет время, чтобы немного рассказать о функциях в функциях и области. Я пытаюсь понять немного больше о функциях и объеме переменных и нашел неплохой учебник, но этой части я просто не получаю.
Задача:
Создайте функцию, которая будет работать следующим образом: 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? Было бы здорово, если бы кто-нибудь дал некоторые объяснения.