web-dev-qa-db-fra.com

Javascript ES6 export const vs export let

Disons que j'ai une variable que je veux exporter. Quelle est la différence entre

export const a = 1;

contre

export let a = 1;

Je comprends la différence entre const et let, mais lorsque vous les exportez, quelles sont les différences?

123
Cheng

Dans ES6, imports sont des vues en lecture seule en direct sur les valeurs exportées. Par conséquent, lorsque vous exécutez import a from "somemodule";, vous ne pouvez pas affecter à a, quelle que soit la façon dont vous déclarez a dans le module.

Cependant, étant donné que les variables importées sont des vues en direct , elles changent en fonction de la variable exportée "brute" dans les exportations. Considérez le code suivant (emprunté à l'article de référence ci-dessous):

//------ 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

Comme vous pouvez le constater, la différence réside vraiment dans lib.js et non pas main1.js.


Pour résumer:

  • Vous ne pouvez pas affecter de variables import- ed, quelle que soit la façon dont vous déclarez les variables correspondantes dans le module.
  • La sémantique traditionnelle let- vs -const s'applique à la variable déclarée dans le module.
    • Si la variable est déclarée const, elle ne peut être réaffectée ni rebondie nulle part.
    • Si la variable est déclarée let, elle ne peut être réaffectée que dans le module (mais pas à l'utilisateur). Si elle est modifiée, la variable import- ed change en conséquence.

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

209
FelisCatus

Je pense qu'une fois que vous l'avez importé, le comportement est le même (à la place, votre variable sera utilisée en dehors du fichier source).

La seule différence serait si vous essayez de le réaffecter avant la fin de ce fichier.

3
slomek