function printTime() { let clock = document.getElementById("clock"); // use dom to choose a place for the clock let curr = new Date(); let currtime = curr.getFullYear() + "/" + (curr.getMonth() + 1) + "/" + curr.getDate(); clock.innerHTML = currtime; setTimeout("printTime()", 1000); } window.onload = function () { printTime(); };Parece que la hora se muestra correctamente, pero tengo curiosidad por qué recibo este error: lab6.js: 6 TypeError no detectado: no se pueden establecer propiedades de nulo (configurando 'innerHTML') en printTime
cuando también agregué <div id="clock"></div> en el código HTML?
Creo que tu código está funcionando bien aquí
function printTime() { let clock = document.getElementById("clock"); // use dom to choose a place for the clock let curr = new Date(); let currtime = curr.getFullYear() + "/" + (curr.getMonth() + 1) + "/" + curr.getDate(); clock.innerHTML = currtime; setTimeout("printTime()", 1000); } window.onload = function () { printTime(); }; <div id="clock"></div>En mi opinión, obtiene el error porque el elemento aún no se representa en window.onload . En su lugar, debería buscar body.onload , o en otras palabras, si configurara la llamada a printTime directamente en la etiqueta del cuerpo, funcionaría bien.
<body onload="printTime()"> En cualquier caso, envolver printTime() dentro de una función de flecha también funciona sin el error:
<!DOCTYPE html> <html lang="en"> <head> <title>Document</title> <script> function printTime() { let clock = document.getElementById("clock"); // use dom to choose a place for the clock let curr = new Date(); let currtime = curr.getFullYear() + "/" + (curr.getMonth() + 1) + "/" + curr.getDate(); clock.innerHTML = currtime; setTimeout("printTime()", 1000); } window.onload = () => { printTime(); }; </script> </head> <body> <div id="clock"></div> </body> </html>