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 только лишь в виду умственной лени, абсолютного отсутствия мотивации и желания учиться?
Если у вас возникают сложности с пониманием простейших инструментов, логичнее восполнить пробелы в теории, чем обзывать дураками людей, пожертвовавших своё время на создание этих инструментов.
qqignatqq: ну, во-первых, тостер - это не чатик охотников за привидениями, готовых придти на помощь в любую секунду, это всё же q&a, как stack overflow.
Во-вторых, да, это было сложно. Сложно помогать человеку, который сам не хочет себе помочь, просто последовав моему совету почитать код.
В-третьих, поверьте - обозначенная в вашем вопросе проблема больше ни у кого никогда не возникнет, вообще. Решение не имеет никакой ценности, таким образом хоть какое-то значение этот вопрос имел только для вас, для решения конкретной возникшей у вас проблемы. Поэтому я считаю, что если весь этот стёб в результате привёл к тому, что вы либо почитали код, либо самостоятельно поняли как использовать плагин, то это было намного полезней, чем если б я просто за вас написал это.
Дмитрий, это конечно возможно, но вообще это немного странно, что у вас где-то там выскакивает ошибка из-за того что не найден элемент, т.к. если вы используете методы/функции jQuery, то он сам заботится о таких случаях: $('cats').on('click', f); не вызовет ошибку, если результирующий набор пуст. Лучше код покажите.
westdp: нууу, задавая вопрос "На undefined - это как?" я скорее хотел чтобы вы показали пример подобной проверки, потому что функция jQuery не возвращает undefined вообще ни при каких условиях.
qqignatqq: цвет есть, в моём случае randomColor({ luminosity: 'random', hue: 'pink' }); вернуло "#5b2270".
Технически у блоков не изменился цвет потому что вы его не задали. А в целом этого не происходит потому что вы меня не слушаете. Я же говорю вам: откройте код демки, посмотрите как устанавливается цвет для элемента. Я даже сказал вам в какой функции это происходит, в функции renderDemo. Вам вообще из всех трудов осталось только открыть код, найти эту функцию, найти где в ней выполняется та функция которая вам интересна (randomColor) и посмотреть что происходит с результатом выполнения.