Javascript ES6 export const vs export let

149

Digamos que tengo una variable que quiero exportar. Cuál es la diferencia entre

export const a = 1;

vs

export let a = 1;

Entiendo la diferencia entre consty let, pero cuando los exporta, ¿cuáles son las diferencias?

Cheng
fuente
exportdetalles de palabras clave aquí . Actualmente no es compatible de forma nativa con ninguno de los navegadores web.
RBT

Respuestas:

247

En ES6, los imports son vistas en vivo de solo lectura en valores exportados. Como resultado, cuando lo hace import a from "somemodule";, no puede asignar a ano importa cómo declare aen el módulo.

Sin embargo, dado que las variables importadas son vistas en vivo , cambian de acuerdo con la variable exportada "en bruto" en las exportaciones. Considere el siguiente código (tomado del artículo de referencia a continuación):

//------ lib.js ------
export let counter = 3;
export function incCounter() {
    counter++;
}

//------ main1.js ------
import { counter, incCounter } from './lib';

// The imported value `counter` is live
console.log(counter); // 3
incCounter();
console.log(counter); // 4

// The imported value can’t be changed
counter++; // TypeError

Como puede ver, la diferencia realmente radica en lib.js, no main1.js.


Para resumir:

  • No puede asignar importvariables a, sin importar cómo declare las variables correspondientes en el módulo.
  • La semántica let-vs- tradicional se constaplica a la variable declarada en el módulo.
    • Si se declara la variable const, no se puede reasignar o rebotar en ningún lado.
    • Si se declara la variable let, solo se puede reasignar en el módulo (pero no el usuario). Si se cambia, la importvariable -ed cambia en consecuencia.

Referencia: http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values

FelisCatus
fuente
2

Creo que una vez que lo haya importado, el comportamiento es el mismo (en el lugar en que su variable se usará fuera del archivo fuente).

La única diferencia sería si intenta reasignarlo antes del final de este mismo archivo.

slomek
fuente