Параллельно с работой над своим проектиком продолжаю проходить хекслетовские курсы. Сейчас прохожу «прототипы».

Что прикольно, там в качестве практики нужно написать библиотеку для генерации хтмл-кода, что очень напоминает, то, что я пытаюсь делать в своем проекте. Уже на середине курса становится понятно, как мои решения можно улучшить.

Поначалу курсы почти полностью фокусировались на самом программировании, не затрагивая сильно особенности джаваскрипта. А сейчас все чаще приходится сталкиваться с этими особенностями, и некоторые из них, надо признаться, довольно неожиданные.

Например, функция в джаваскрипте — это объект. В этом объекте есть свойство valueOf. Функция в этом свойстве автоматически вызвается каждый раз, когда нужно получить значение объекта. Так вот, никто не запрещает взять функцию и записать в это свойство что угодно:

const f = () => 'hello';
f.valueOf = () => 10;
console.log(f + 1); // 11

На этом факте построено задание, на котором я застрял пока дольше всего: написать функцию, которую можно бесконечно применять к любому количеству чисел, а на выходе будет функция, всегда равная сумме этих чисел.

magic(1) == 1; // true
magic(1, 2)(3) == 6; // true
magic(1, 2)(3)(4, 5) == 15; // true