importar español es6 ecmascript clases javascript ecmascript-6 es6-module-loader

español - import javascript



¿Cuál es el orden de ejecución definido de las importaciones ES6? (1)

He intentado buscar en Internet el orden de ejecución de los módulos importados. Por ejemplo, digamos que tengo el siguiente código:

import "one" import "two" console.log("three");

Donde one.js y two.js se definen de la siguiente manera:

// one.js console.log("one"); // two.js console.log("two");

¿Se garantiza que la salida de la consola sea:

one two three

¿O es indefinido?


Los módulos ES6 importados se ejecutan de forma asíncrona . Sin embargo, todas las importaciones se ejecutan antes de que el script realice la importación. Esto hace que los módulos ES6 sean diferentes de, por ejemplo, los módulos Node.js o las etiquetas <script> sin el atributo async . Los módulos ES6 están más cerca de la especificación de AMD cuando se trata de cargar. Para obtener más detalles, consulte la sección 16.6.1 de Explorando ES6 por Axel Rauschmayer.

Por lo tanto, en el ejemplo que proporciona anteriormente, no se puede garantizar el orden de ejecución. Hay dos resultados posibles. Usted podría ver esto:

one two three

O puede que veas esto:

two one three

En otras palabras, los dos módulos importados podrían ejecutar sus llamadas console.log() en cualquier orden; Son asíncronos entre sí . Pero ciertamente se ejecutarán antes de la secuencia de comandos que los importa, por lo que se garantiza que "three" se registren en último lugar.

Dicho esto, ningún navegador moderno implementa módulos ES6 . No sé si transpilers como Babel siguen la especificación original a este respecto.

Actualizar

A la luz de @BenjaminGruenbaum''s comentarios a continuación de @BenjaminGruenbaum''s , decidí estudiar esto más de cerca. A pesar de la fuente anterior, no pude encontrar claramente establecido en la especificación en sí que la carga del módulo es asíncrona (aunque hay que reconocer que, como hablante nativo de inglés, la especificación es un poco difícil de leer). Si ese es el caso, entonces el orden en que se ejecutan las importaciones dependerá de la implementación. Dicho esto, la misma conclusión es válida: no puede contar con que sus importaciones se ejecuten en ningún orden en particular .