Sé que los módulos ECMAScript estándar son estáticos y los enlaces se importan, no copias de valores.
module.js
let age = 15 function doBirthday() { console.log('module, age is', age) age++ console.log('module, age after birthday is', age) } export { age, doBD } main.js
import {age,doBirthday } from './module.js' console.log('main, age is: ', age) console.log('doBirhtday') doBirthday() console.log('main, age after birthday: ', age)huellas dactilares:
main, age is: 15 doBirhtday module, age is: 15 module, age after birthday is: 16 main, age after birthday: 16 //value is updated from module' doBirthdaymientras usa la importación dinámica en main.js
const { age, doBirthday } = await import('./module.js') console.log('main, age is: ', age) console.log('doBirhtday') doBirthday() console.log('main, age after birthday: ', age)huellas dactilares:
main, age is: 15 doBirhtday module, age is: 15 module, age after birthday is: 16 main, age after birthday: 15 //as if age variable was not bonded to the one imported from moduleTraté de buscar una explicación de estos dos comportamientos diferentes pero no encontré ninguno.
¿Alguien puede hacer referencia a alguna documentación o explicar cuál es la diferencia entre estas dos formas de importación en ES6?
Si crea nuevos identificadores con la palabra clave de import (no la función de import ), esos identificadores serán los mismos valores exportados por el otro módulo:
import {age,doBirthday } from './fabio.mjs' ^^^^^^ Si crea nuevos identificadores con const , esos identificadores serán variables simples, no ligadas inherentemente a lo que sea que las haya generado, incluso si provienen de un módulo:
const { age, doBirthday } = await import('./fabio.mjs') ^^^^^Lo anterior es similar a hacer
const fabioResult = await import('./fabio.mjs'); const { age, doBirthday } = fabioResult;Ya no es un identificador importado, solo una variable simple cuyo valor se toma del objeto en el momento de la asignación.