Me he dado cuenta de que algunos scripts parecen ser llamados antes que otros en una página determinada, me preguntaba, ¿cuál es el orden específico para cargar los scripts? In-page antes de hacer referencia a los scripts .js? ¿Se ejecutan en orden desde el primer <script>
mencionado en último lugar en la página o depende del navegador? ¿Cómo se puede asegurar que un script específico se ejecute primero en una página?Asegúrese de que primero se ejecuta una secuencia de comandos de Javascript?
Respuesta
He notado que algunas secuencias de comandos parecen ser llamadas antes que otras en una cierta página de . Me preguntaba, ¿cuál es el orden específico para cargar los scripts?
Esto es configurado por W3C en sus especificaciones de idioma. Para el HTML 4.01 Specification, por ejemplo, se define en Section 18.2.4 Dynamic modification of documents, item 1.
¿In-page antes de hacer referencia a los scripts .js?
Ver más arriba. No, las secuencias de comandos en línea y vinculadas se manejan de manera idéntica.
Son corren con el fin de mencionado en primer lugar a la última en la página, o es esto depende del explorador?
Las especificaciones requieren que se ejecuten secuencialmente de arriba hacia abajo. Deberá encontrar un navegador que implemente el idioma de acuerdo con las especificaciones. No puedo pensar en ningún otro momento que maneje etiquetas SCRIPT de manera diferente, pero estoy seguro de que es posible.
Otra cosa a considerar es la definición de "ejecutar". Eso puede sonar como un análisis semántico, pero no lo es. JavaScript, como cualquier lenguaje de programación, está diseñado para comportarse de acuerdo con los estándares. JavaScript se especifica en el ECMA-262 5.1 Edition/June 2011 standard para evaluar de izquierda a derecha en la Sección 7 Convenciones léxicas. (Las terminaciones de línea se tratan como el carácter más a la izquierda de la siguiente línea). Este documento también proporciona convenciones para el orden en que se evalúan las instrucciones y otras operaciones, como las sentencias WHILE o FOR.
¿Cómo se puede asegurar que un script específico se ejecute primero en una página?
(1) Colóquelo en la parte superior, y (2) elija un navegador que implemente las especificaciones del idioma.
Sin embargo, creo que puede haber algo más detrás de esta pregunta. Si intenta evitar que se ejecute código inesperado, deberá bloquearlo hasta que el controlador de eventos ONLOAD registre que la página está completa. (Simplemente encierre sus operaciones en una función o rodeelas con un IF para verificar si hay un indicador booleano, es decir, isLoaded se establece como verdadero mediante ONLOAD.) Luego, cuando el controlador de eventos ONLOAD se active, puede iniciar operaciones en su propio calendario sin tener que preocuparse por cosas como objetos DOM desinstalados.
Mientras no se carguen dinámicamente los scripts o se marquen como async o diferir, los scripts se ejecutan o evalúan en el orden que se encuentra en la página. Entonces, los primeros scripts encontrados se ejecutan primero.
Un archivo de script de referencia externa que debe cargarse hará que toda la ejecución de JavaScript espere hasta que el archivo referenciado externamente se cargue y analice y se ejecute.
Por lo tanto, el orden de evaluación del javascript normal (no asincrónico, no diferido) es 100% determinado según el orden en que se encuentra en la página.
De forma predeterminada, las etiquetas script
se descargan y se evalúan secuencialmente tal como se encuentran en un documento HTML.
Sin embargo, si utiliza los atributos async
o defer
, la ejecución se realiza después de que el script finaliza la descarga (asincrónico) o cuando la página finaliza la carga (aplazamiento).
No cuente con la ejecución de aplazamiento del atributo * aplazar * hasta después del análisis (de lo contrario sería una buena alternativa a la carga y los eventos listos). En HTML 4, [defer] (http://www.w3.org/TR/html401/interact/scripts.html#adef-defer) era solo una pista de que el script no creaba contenido para que el navegador pudiera seguir cargando mientras lo ejecuta. En HTML5, [diferir] (http://www.w3.org/TR/html5/scripting-1.html#attr-script-defer) significa "esperar hasta que el análisis haya terminado". HTML5 no está lo suficientemente respaldado como para que se pueda confiar en el comportamiento especificado, tal vez desde hace algunos años. – RobG
Los scripts se ejecutan en el orden en que se evalúan en el archivo html, tal como lo leería de arriba hacia abajo.
Sin embargo, async y defer pueden anular esto para los navegadores que tienen implementados.
- 1. Shell script: Asegúrese de que la secuencia de comandos no se ejecuta si ya se está ejecutando
- 2. ¿cómo puedo determinar si una secuencia de comandos python se importa como módulo o se ejecuta como secuencia de comandos?
- 3. Falta la DLL cuando se ejecuta como secuencia de comandos
- 4. Advertencias de PHP provocan que la secuencia de comandos se detenga en IIS que ejecuta FastCGI
- 5. Comience o asegúrese de que la tarea retrasada se ejecuta cuando una aplicación/servidor se reinicia
- 6. ¿Cómo se ejecuta una secuencia de comandos de Python en el lado del servidor usando jQuery?
- 7. Cómo obtener el nombre de la secuencia de comandos Perl que se ejecuta
- 8. Detectando cuando una secuencia de comandos python se ejecuta de forma interactiva en ipython
- 9. ¿Se ejecuta una secuencia de comandos python durante un período de tiempo especificado por el usuario?
- 10. ¿Cómo se ejecuta un comando en un sistema remoto en una secuencia de comandos de BASH?
- 11. PHP bloqueando/asegurándose de que una secuencia de comandos determinada solo se ejecuta una vez en un momento dado
- 12. ¿Cómo se determina el directorio en el que se ejecuta una secuencia de comandos o aplicación Haskell?
- 13. MUY simple Launchd plist no ejecuta mi secuencia de comandos
- 14. Obtener $ USER dentro de la secuencia de comandos de shell cuando se ejecuta con sudo?
- 15. Se ejecuta la secuencia de comandos Node.js, pero no se detiene.
- 16. Forzar una secuencia de comandos de PowerShell para que se ejecute como administrador
- 17. La secuencia de comandos por lotes no se ejecuta si se llamó a chcp
- 18. ¿Puede una secuencia de comandos bash ejecutar comandos simultáneos y luego esperar a que se completen?
- 19. Invocar una segunda secuencia de comandos con argumentos de una secuencia de comandos
- 20. .net - ¿Cómo se registra una secuencia de comandos de inicio?
- 21. Salir de una pantalla después de que se haya terminado una secuencia de comandos
- 22. ¿Puedo escribir el código de Ruby que se ejecuta solo cuando se ejecuta mi secuencia de comandos, pero no cuando se requiere?
- 23. script de línea de comandos php no se ejecuta
- 24. Crear un hipervínculo (o botón) que ejecuta una secuencia de comandos python y luego redirige cuando la secuencia de comandos completa
- 25. Comprueba si se invocó la secuencia de comandos bash desde una shell u otra secuencia de comandos/aplicación
- 26. Cómo ejecutar una magia de IPython desde una secuencia de comandos (o cronometrar una secuencia de comandos de Python)
- 27. URL de la secuencia de comandos actual en JavaScript
- 28. secuencia de comandos ajax independiente
- 29. En Linux, cómo asegurarme de que se ejecuta una secuencia de código sin ninguna interrupción
- 30. JavaScript: ¿Secuencia de comandos en línea con atributo de SRC?
Proporcione una referencia de la edición ECMA-262 5+ que declara que este es el comportamiento especificado según los estándares. ¿Estás seguro de que funciona de esta manera en todos los navegadores y plataformas y no es solo una casualidad? – ingyhere
@ingyhere - No sé dónde hay una referencia, no tengo tiempo para mirar en este momento. Este es el CAMINO en el que funciona el javascript: si tiene alguna razón para impugnarlo, indique ese motivo. Javascript se ejecuta desde arriba/abajo. Tiene que ser consistente en todos los navegadores o se romperán muchas páginas porque la gente confía en que JavaScript se ejecuta de arriba a abajo todo el tiempo. Prácticamente cualquier idioma tiene que ofrecer un orden de ejecución garantizado entre diferentes partes del código, porque a menudo se requiere para hacer que su lógica funcione. – jfriend00
Aquí hay una referencia: http://docstore.mik.ua/orelly/webprog/jscript/ch12_03.htm – jfriend00