Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

195
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!