Styling I understand but to tick the clock when time actually has changed you need to use animation frames APIs and check for clock change more often than "every 1000 ms" because setTimeout will eventually drift even if you start exactly on first second time change. This is a test for depth of knowledge of a programmer I used to use in the past in interviews.
I wish that was true but you can easily see it drifting in Chrome
let lastms
function tick() {
if (lastms === undefined)
lastms = new Date().getMilliseconds()
else if (lastms !== new Date().getMilliseconds())
throw new Error('Drifted')
}
setInterval(tick, 1000)