Функция - строковый буфер
важность: 5
В некоторых языках программирования существует объект «строковый буфер», который аккумулирует внутри себя значения. Его функциональность состоит из двух возможностей:
- Добавить значение в буфер.
- Получить текущее содержимое.
Задача – реализовать строковый буфер на функциях в 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 (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'
Начальное значение text = ''
– пустая строка. Поэтому операция text += piece
прибавляет piece
к строке, автоматически преобразуя его к строковому типу, как и требовалось в условии.
function makeBuffer() {
var text = '';
return function(piece) {
if (arguments.length == 0) { // вызов без аргументов
return text;
}
text += piece;
};
};