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
constkan den inte tilldelas på nytt eller binds om någonstans.
- Om variabeln är deklarerad som
- Om variabeln deklareras med
letkan den endast tilldelas på nytt i modulen (men inte av användaren). Om den ändras förändras denimport-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
