Реализовать функцию compose, которая принимает аргументами любое количество функций, и возвращает функцию, которая
при вызове вызовет все функции, которые compose получила аргументом.
function log1() {console.log(111)};
function log2() {console.log(222)};
function log3() {console.log(333)};
var logAll = compose(log1, log2, log3);
logAll(); // 111
// 222
// 333
Описать функцию templater(templateString, dataObj). Функция, принимает аргументом строку и объект. Заменяет все
вхождения подстрок вида ${STRING} значениями из объекта с ключом STRING. Пример использования:
templater('${who} ${action} ${what}', {
who: 'mama',
action: 'mila',
what: 'ramu'
}); // 'mama mila ramu'
Релизовать функцию createKeeper(), которая возвращает объект с 2 методами put(key, value) и get(key).
Метод get(key) должен возвращать данные, которые были сохранены с помощью метода put, если вызывается с тем-же
значением key, что и put. Ключами могут быть как объекты, так и примитивы, про NaN не задумываться.
Если put был вызван с таким ключом, с которым уже был вызван ранее, старое значение перезатирается новым.
Доступ к ключам и значениями должен быть возможен только через методы put и get.
var keeper = createKeeper();
var key1 = {};
var key2 = {};
var key1Copy = key1;
keeper.put(key1, 999)
keeper.put(key2, [1,2,3])
console.log(keeper.get(key1)); // 999
console.log(keeper.get(key2)); // [1,2,3]
console.log(keeper.get(key1Copy)); // 999
console.log(keeper.get({})); // null
keeper.put(key1, key2);
console.log(keeper.get(key1Copy) === key2); // true