<body onload="startTime('<%= time %>')"> </body> <script> setTimeout(function startTime(time) { alert(time); }, 1000) </script>He devuelto el "tiempo" del lado del cliente mediante la entrada de otra página. Luego, el "startTime()" se llamará cada segundo, en el que se le dará el parámetro "tiempo" a la función.
¿Cómo puedo pasar la variable "tiempo" en el <script> cada segundo en la función de carga?
Para ejecutarlo cada segundo, debe usar setInterval en lugar de setTimeout .
Debe introducir su startTime fuera de setInterval .
Su '<%= time %>' no debería ser una cadena también, debería ser así <body onload="startTime(<%= time %>)"> .
<body onload="startTime(1000)"> </body> <script> function startTime(time) { setInterval(function() { alert(time); }, time) } </script> Si el time es una cadena, debe analizar su tiempo en un número.
<body onload="startTime('1000')"> </body> <script> function startTime(time) { setInterval(function() { alert(time); }, Number(time)) //parse time string to a number } </script>Aunque su pregunta no es muy clara, tal vez pueda usar $('document').ready(function(){}); dentro de su script si usa jQuery. Además, si no desea utilizar jQuery, otro enfoque podría ser una función anónima autoejecutable como esta
<script> (function(time) { //this function will we invoked immediately console.log(time); })("Pass params here"); </script>setTimeout ejecutará la función después de que se haya agotado el temporizador (en su caso, 1000 ms). Si desea que se ejecute continuamente cada N segundos, debe usar setInterval en su lugar.
MDN: https://developer.mozilla.org/en-US/docs/Web/API/setInterval
Puede pasar argumentos a la función de devolución de llamada pasando un tercer (o más) argumento a setInterval. Pero no se actualizará, debe crear su propio código a su alrededor, para obtener el valor actualizado.
Lo que tienes en tu código ahora mismo no funcionará. No llama a la función de devolución de llamada directamente. setTimeout comienza inmediatamente después de que se carga la página. Su función startTime es anónima y es esencialmente esto:
setTimeout((time) => { alert(time); }, 1000) // alert will be run after 1 second on page loadOtra recomendación es no ejecutar código desde cadenas HTML. Mantenga el código relacionado con JavaScript dentro de JavaScript. Puede consultar elementos HTML dentro de JavaScript y, dependiendo de si cambiaron, puede comenzar a ejecutar el código.