Javascript ES6 exportar const vs exportar let


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 const y let, pero cuando los exportas, ¿cuáles son las diferencias?

Author: ftor, 2015-09-14

2 answers

En ES6, imports son vistas de solo lectura en vivo en valores exportados. Como resultado, al hacer import a from "somemodule";, no puede asignar a a sin importar cómo declare a en el módulo.

Sin embargo, dado que las variables importadas son vistas en vivo, cambian de acuerdo con la variable exportada "raw" en exports. 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 puedes ver, la diferencia radica realmente en lib.js, no main1.js.


Para resumir:

  • No puede asignar a import-ed variables, sin importar cómo declare las variables correspondientes en el módulo.
  • La semántica tradicional let-vs-const se aplica a la variable declarada en el módulo.
    • Si la variable se declara const, no se puede reasignar ni rebotar en ninguna parte.
    • Si la variable es declarada let, solo puede ser reasignada en el módulo (pero no en el usuario). Si lo es cambiada, la variable import-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

 161
Author: FelisCatus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-31 12:00:06

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

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

 2
Author: slomek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-14 07:00:45