Добрый вечер, уважаемые программисты.
Не совсем понятно, хоть и кучу всего перерыл, каким образом компилятор работает с этим кодом:
function makeBuffer() {
var text = '';
return function(piece) { /* <-- (*) */
if (arguments.length == 0) { // вызов без аргументов
return text;
}
text += piece;
};
};
var buffer = makeBuffer();
// добавить значения к буферу
buffer('Замыкания'); /* <-- (**) */
buffer(' Использовать');
buffer(' Нужно!');
alert( buffer() ); // 'Замыкания Использовать Нужно!'
var buffer2 = makeBuffer();
buffer2(0);
buffer2(1);
buffer2(0);
alert( buffer2() ); // '010'
В строке
(*) мы
внутренней (не внешней) функции передаем параметр
piece, но в строке
(**) мы, передав внешнюю, основную функцию переменной
buffer, передаем
внешней функции аргумент.
Как так-то? Почему параметр у внутрененй, а аргумент у внешней.
Буду безумно благодарен за ссылки на ресурсы и ваши разъяснения!
Заранее выражаю огромную благодарность!