¿Es verdad que no hay garantías en los principales navegadores de que las siguientes etiquetas de secuencia de comandos siempre se ejecutarán secuencialmente Y en orden de declaración? es decir, ¿debería suponer que el siguiente código no siempre arrojará x == 'ab' en alerta?El pedido de JavaScript <script> no se garantiza la ejecución de las etiquetas en los principales navegadores?
<head>
<script type="text/javascript">
//tag A
var x = x || ''; x += 'a';
</script>
<script type="text/javascript">
//tag B
var x = x || ''; x += 'b';
</script>
</head>
<body>
<script type="text/javascript">
alert('x='+x);
<script>
</body>
... y es posible que en lugar de x será uno de los siguientes:
- 'ba' - si la etiqueta B se ejecuta antes de una
- 'a' o 'b' - condición de carrera, donde a y B se ejecutan en paralelo (Aunque parece que this hilo dice claramente que los navegadores sólo se asignan un solo hilo de JS)
Estoy familiarizado con que esto es un problema para los archivos js src vinculados, pero no para los bloques de scripts como se define en la pregunta. p.ej. fallará 9 veces de cada diez (el archivo js en caché es 1 de cada 10) –
Los navegadores definitivamente deberían ejecutar estos scripts secuencialmente y en orden. ¿Tu experiencia ha sido lo contrario? –
@JonathanFingland: tampoco es un problema para los archivos JS vinculados, a menos que utilicen los atributos 'async' o' delafer', o que ellos mismos escriban/agreguen más scripts. – bobince