Javascript ES6 export const vs export let

149

Digamos que tenho uma variável que desejo exportar. Qual é a diferença entre

export const a = 1;

vs

export let a = 1;

Entendo a diferença entre conste let, mas quando você as exporta, quais são as diferenças?

Cheng
fonte
exportdetalhes da palavra-chave aqui . Atualmente, ele não é suportado nativamente por nenhum navegador da web.
RBT

Respostas:

247

No ES6, imports são visualizações somente leitura ao vivo em valores exportados. Como resultado, quando você o fizer import a from "somemodule";, não poderá atribuir a avocê, independentemente de como você declara ano módulo.

No entanto, como as variáveis ​​importadas são visualizações ao vivo , elas mudam de acordo com a variável exportada "bruta" nas exportações. Considere o seguinte código (emprestado do artigo de referência abaixo):

//------ 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 você pode ver, a diferença realmente reside lib.js, não main1.js.


Para resumir:

  • Você não pode atribuir importvariáveis a -ed, não importa como você declara as variáveis ​​correspondentes no módulo.
  • A semântica let-vs- tradicional constse aplica à variável declarada no módulo.
    • Se a variável for declarada const, ela não poderá ser reatribuída ou recuperada em nenhum lugar.
    • Se a variável for declarada let, ela poderá ser reatribuída no módulo (mas não no usuário). Se for alterado, a importvariável -ed será alterada de acordo.

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

FelisCatus
fonte
2

Acho que depois de importá-lo, o comportamento é o mesmo (no lugar em que sua variável será usada fora do arquivo de origem).

A única diferença seria se você tentar reatribuí-lo antes do final deste mesmo arquivo.

slomek
fonte