Po koleji w funkcji clock:
- pobierasz date
let date = new Date(),
- pobierasz godziny, minuty, sekundy
hr = date.getHours(),
min = date.getMinutes(),
sec = date.getSeconds();
- dodajesz zera jeżeli któraś z wartości jest jednocyfrowa
hr<10&&(hr="0"+hr),min<10&&(min="0"+min),sec<10&&(sec="0"+sec);
- tworzysz stringa w formacie "ggmmss"
let time = "" + hr + min + sec;
- rozbijasz stringa na tablice zawierające pojedyńcze znaki i zmieniasz na typ number
let nums = time.split("").map(Number)......
- wykorzystujesz metodę toString z podstawą 2 żeby zamienić każdy z numerów na stringa na liczbe w systemie binarnym
......map(n => n.toString(2)).....
- i odwracasz kolejność znaków
......split("").reverse().join("")
- na tym etapie masz tablice, liczb binarnych zapisanych jako stringi, ale liczby binarne są pisane od prawej do lewej czyli np 4 ("100") jest zapisane jako ("001")
Dalej w funkcji w pętli każdy ze stringów jest dopełniany zerami: do 2 jeżeli znajduje się na 0 indekcie w tablicy, do 4 jeżeli jest na pierwszym, do 3 jeżeli jest na drugim itd.....
Czyli gdyby np czwórka znajdowała się na 1 indekcie w tablicy wyglądałaby tak: "0010" (z dodanym zerem), zrobione jest to dlatego, że póżniej divy (stylowane na kołeczka) wypełniane są kolorami od dołu do góry "1" oznacza wypełnienie. Bez tej pętli for byłyby np 4 miejsca do zapełnienia a tylko 3 znaki w stringu oznaczające czy ma być wypełnione czy nie.