JavaScript ES6 export const vs export let

149

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

export const a = 1;

contre

export let a = 1;

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

Cheng
la source
exportdétails du mot-clé ici . Actuellement, il n'est pris en charge de manière native par aucun des navigateurs Web.
RBT

Réponses:

247

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

Cependant, comme 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 voir, la différence réside vraiment dans lib.js, non main1.js.


Résumer:

  • Vous ne pouvez pas affecter des importvariables -ed, quelle que soit la manière dont vous déclarez les variables correspondantes dans le module.
  • La sémantique traditionnelle let-vs- consts'applique à la variable déclarée dans le module.
    • Si la variable est déclarée const, elle ne peut pas être réaffectée ou 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 importvariable -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

FelisCatus
la source
2

Je pense qu'une fois que vous l'avez importé, le comportement est le même (à l'endroit où 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.

Slomek
la source