В некоторых языках программирования существует объект «строковый буфер», который аккумулирует внутри себя значения. Его функционал состоит из двух возможностей:
- Добавить значение в буфер.
- Получить текущее содержимое.
Задача — реализовать такой объект на функциях в JavaScript, со следующим синтаксисом:
- Создание объекта:
var buffer = makeBuffer();. - Вызов
makeBufferдолжен возвращать такую функциюbuffer, которая при вызовеbuffer(value)добавляет значение к в некоторое внутреннее хранилище, а при вызове без аргументовbuffer()— возвращает его.
Вот пример работы:
function makeBuffer() { /* ваш код */ }
var buffer = makeBuffer();
// добавить значения к буферу
buffer('Замыкания');
buffer(' Использовать');
buffer(' Нужно!');
// получить текущее значение
alert( buffer() ); // Замыкания Использовать Нужно!
Буфер должен преобразовывать все данные к строковому типу:
var buffer = makeBuffer(); buffer(0); buffer(1); buffer(0); alert( buffer() ); // '010'
Решение не должно использовать глобальные переменные.
Решение
Решение
Текущее значение текста удобно хранить в замыкании, в локальной переменной makeBuffer:
function makeBuffer() {
var text = '';
return function(piece) {
if (piece === undefined) {
return text;
}
text += piece;
};
};
var buffer = makeBuffer();
// добавить значения к буферу
buffer('Замыкания');
buffer(' Использовать');
buffer(' Нужно!');
alert( buffer() ); // 'Замыкания Использовать Нужно!'
var buffer2 = makeBuffer();
buffer2(0); buffer2(1); buffer2(0);
alert( buffer2() ); // '010'
Начальное значение text = '' — пустая строка. Поэтому операция text += piece прибавляет piece к строке, автоматически преобразуя его к строковому типу, как и требовалось в условии.
#342