Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

197
Visualizações
¿Se elevan las importaciones de módulos ES6?

Sé que en la sintaxis del nuevo módulo ES6, el motor de JavaScript no tendrá que evaluar el código para conocer todas las importaciones/exportaciones, solo lo analizará y "sabrá" qué cargar.

Esto suena como izar. ¿Están izados los módulos ES6? Y si es así, ¿se cargarán todos antes de ejecutar el código?

¿Es posible este código?

 import myFunc1 from 'externalModule1'; myFunc2(); if (Math.random()>0.5) { import myFunc2 from 'externalModule2'; }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Después de investigar un poco más, he encontrado:

  • ¡Las importaciones SON izadas! de acuerdo con la especificación de ModuleDeclarationInstantiation
  • TODOS los módulos dependientes se cargarán antes de ejecutar cualquier código.

Este código no tendrá errores y funcionará:

 localFunc(); import {myFunc1} from 'mymodule'; function localFunc() { // localFunc is hoisted myFunc1(); }
over 4 years ago · Santiago Trujillo Relatório

0

Será un error de sintaxis . De acuerdo con esta parte de la especificación :

 Module : ModuleBody ModuleBody : ModuleItemList ModuleItemList : ModuleItem ModuleItemList ModuleItem ModuleItem : ImportDeclaration ExportDeclaration StatementListItem

Significa que el módulo solo puede contener ImportDeclaration , ExportDeclaration o StatementListItem . De acuerdo con este StatementListItem no podría contener ImportDeclaration ni ExportDeclaration .

 import myFunc1 from 'externalModule1';

es una declaración de importación, mientras que:

 if (Math.random()>0.5) { import myFunc2 from 'externalModule2'; }

es una declaración. Entonces su código resultará en un error de sintaxis.

¿Qué pasa con "¿se cargarán todos antes de ejecutar el código?". Esta parte de la especificación contiene la siguiente oración:

NOTA: Antes de instanciar un módulo, todos los módulos solicitados deben estar disponibles.

Así que sí. Todos se cargarán antes de ejecutar el código .

over 4 years ago · Santiago Trujillo Relatório

0

La especificación ES6 está sujeta a cambios, pero este borrador es explícito:

La resolución de variables estáticas y el paso de enlace comprueban si hay conflictos en los nombres de las variables importadas. Si hay un conflicto entre dos nombres importados, o un nombre importado y otro enlace local, entonces es un error de tiempo de compilación.

Y tratar de importar en tiempo de ejecución es una idea dudosa, no solo en ES6. También del borrador:

La compilación resuelve y valida todas las definiciones y referencias de variables. La vinculación también ocurre en tiempo de compilación; la vinculación resuelve y valida todas las importaciones y exportaciones de módulos.

Puede ver que la implementación de ES6 de Babel no está muy contenta con ella.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda