Roquefort: в качестве примера выполните в консоли console.log('test'); a = 1; b = 2; c = 3;. Сначала console.log выведет 'test', а потом сама консоль выведет последнее вернувшееся значение, 3.
Log это метод объекта console, да. Он выводит в консоль все что вы ему передали в аргументах и возвращает undefined. Первая строка вывода это собственно вывод в консоль, функционал console.log. Вторая строка это вывод в консоль обусловленный окружением - выводится последнее значение.
То есть если выполнить в консоли console.log('hello, world'); то сначала выведется 'hello, world', а потом консоль выведет последнее значение, undefined.
А что именно вас в этом удивляет? Вы ничего не передаёте в console.log, он и выводит то что вы передаёте - ничего. То же и с var - он возвращает undefined, потому что так он работает. У него другая функция.
ajky: и мне кажется, что это очень странно, т.к. я даже не могу смоделировать ситуацию, в которой бы let не исправлял ситуацию. Тогда можно попробовать положить key в замыкание, но это вроде как одно и то же, так что я не знаю чо делать.
scepter: обычно задачу решают в соответствии с целью, то есть если нужно переопределить функции, то вы просто переопределяете функции. Фокусы с аргументами мне кажутся тут лишними. Но всё же добавил в ответ.
scepter: нууу, мне кажется это не очень нужно: counter возвращает функцию, generator возвращает функцию, это за собой влечет некоторые сложности. Чтобы с помощью созданных вами инструментов/функций изменить параметры генерируемой функции, вам нужно будет полностью переопределить её саму. Это вы можете сделать с помощью генератора. Поэтому, мне кажется, еще один уровень контроля, переопределяющий исходную функцию, не нужен. Просто переопределяйте:
qqignatqq, если бы на гитхабе можно было бы ставить дислайки, у randomColor он был бы всего один - ваш. Не судите по себе, понимание разницы между строкой и элементом не есть какое-то сакральное знание, его имеют все здесь. Проблемы с использованием этого скрипта больше ни у кого не возникали. Не randomColor причина вашей некомпетентности.
qqignatqq: а что именно здесь сложно? Каждая буква приведённого вами кода разжёвана даже на том же тостере не однажды: объект, возвращаемый querySelectorAll, не является экземпляром Array, поэтому forEach мы вызываем отдельно; стили элемента привязаны к объекту {dom_element}.style; функция randomColor возвращает либо строку, либо массив со строками.
"Вот как я , человек только с около базовыми знаниями js, должен был допереть до вот этого кода?" - поверьте, это никого не интересует. Несмотря на ничтожный объём, за проектом randomColor следят 80 разработчиков, у него 240 форков, 8(!) официальных портов, 18 разработчиков принимают участие в его разработке, 3755 разработчиков посчитали скрипт полезным. Вы правда считаете, что хоть один из этих людей расстроился бы, если узнал, что вы не смогли научиться использовать randomColor только лишь в виду умственной лени, абсолютного отсутствия мотивации и желания учиться?
Если у вас возникают сложности с пониманием простейших инструментов, логичнее восполнить пробелы в теории, чем обзывать дураками людей, пожертвовавших своё время на создание этих инструментов.