update
This commit is contained in:
parent
962caebbb7
commit
87bf53d076
1825 changed files with 94929 additions and 0 deletions
|
@ -0,0 +1,10 @@
|
|||
function makeBuffer() {
|
||||
var text = '';
|
||||
|
||||
return function(piece) {
|
||||
if (arguments.length == 0) { // вызов без аргументов
|
||||
return text;
|
||||
}
|
||||
text += piece;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,22 @@
|
|||
var buffer;
|
||||
beforeEach(function() {
|
||||
buffer = makeBuffer();
|
||||
});
|
||||
|
||||
it("возвращает пустую строку по умолчанию", function() {
|
||||
assert.strictEqual( buffer(), "");
|
||||
});
|
||||
|
||||
it("добавляет аргументы в буффер", function() {
|
||||
buffer('Замыкания');
|
||||
buffer(' Использовать');
|
||||
buffer(' Нужно!');
|
||||
assert.equal( buffer(), 'Замыкания Использовать Нужно!');
|
||||
});
|
||||
|
||||
it("приводит всё к строке", function() {
|
||||
buffer(null);
|
||||
buffer(false);
|
||||
assert.equal( buffer(), "nullfalse");
|
||||
});
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
Текущее значение текста удобно хранить в замыкании, в локальной переменной `makeBuffer`:
|
||||
|
||||
```js
|
||||
//+ run
|
||||
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` к строке, автоматически преобразуя его к строковому типу, как и требовалось в условии.
|
|
@ -0,0 +1,43 @@
|
|||
# Функция - строковый буфер
|
||||
|
||||
[importance 5]
|
||||
|
||||
В некоторых языках программирования существует объект "строковый буфер", который аккумулирует внутри себя значения. Его функционал состоит из двух возможностей:
|
||||
<ol>
|
||||
<li>Добавить значение в буфер.</li>
|
||||
<li>Получить текущее содержимое.</li>
|
||||
</ol>
|
||||
|
||||
**Задача -- реализовать строковый буфер на функциях в JavaScript, со следующим синтаксисом:**
|
||||
|
||||
<ul>
|
||||
<li>Создание объекта: `var buffer = makeBuffer();`.</li>
|
||||
<li>Вызов `makeBuffer` должен возвращать такую функцию `buffer`, которая при вызове `buffer(value)` добавляет значение в некоторое внутреннее хранилище, а при вызове без аргументов `buffer()` -- возвращает его.</li>
|
||||
</ul>
|
||||
|
||||
Вот пример работы:
|
||||
|
||||
```js
|
||||
function makeBuffer() { /* ваш код */ }
|
||||
|
||||
var buffer = makeBuffer();
|
||||
|
||||
// добавить значения к буферу
|
||||
buffer('Замыкания');
|
||||
buffer(' Использовать');
|
||||
buffer(' Нужно!');
|
||||
|
||||
// получить текущее значение
|
||||
alert( buffer() ); // Замыкания Использовать Нужно!
|
||||
```
|
||||
|
||||
Буфер должен преобразовывать все данные к строковому типу:
|
||||
|
||||
```js
|
||||
var buffer = makeBuffer();
|
||||
buffer(0); buffer(1); buffer(0);
|
||||
|
||||
alert( buffer() ); // '010'
|
||||
```
|
||||
|
||||
Решение не должно использовать глобальные переменные.
|
Loading…
Add table
Add a link
Reference in a new issue