ecmascript 6 - Javascript ES6 export const vs export let


Låt oss säga att jag har en variabel som jag vill exportera. Vad är skillnaden mellan

export const a = 1;

mot

export let a = 1;

Jag förstår skillnaden mellan const och let, men när du exporterar dem, vilka är skillnaderna?

Svar #1

I ES6 är imports levande skrivskyddade vyer på exporterade värden. Som ett resultat, när du gör import a från "somemodule";, kan du inte tilldela till a oavsett hur du deklarerar a i modulen.

Men eftersom importerade variabler är levande vyer, ändras de enligt den "råa" exporterade variabeln i exporten. Betrakta följande kod (lånad från referensartikeln nedan):

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

Som du kan se ligger skillnaden verkligen i lib.js, inte i main1.js.

Sammanfattningsvis:

  • Du kan inte tilldela till import-ade variabler, oavsett hur du deklarerar de motsvarande variablerna i modulen.
  • Den traditionella let-vs-const-semantiken gäller för den deklarerade variabeln i modulen.

    • Om variabeln är deklarerad som const kan den inte tilldelas på nytt eller binds om någonstans.
    • Om variabeln deklareras med let kan den endast tilldelas på nytt i modulen (men inte av användaren). Om den ändras förändras den import-ade variabeln därefter.

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

Relaterade artiklar