ecmascript 6 - Javascript ES6 export const vs export let


Să spunem că am o variabilă pe care vreau să o export. Care este diferența dintre

export const a = 1;

vs

export let a = 1;

Înțeleg diferența dintre const și let, dar când le exporți, care sunt diferențele?

Răspuns #1

În ES6, import-urile sunt vizualizări live doar în citire asupra valorilor exportate. Ca urmare, când faci import a from "somemodule";, nu poți atribui nimic lui a indiferent cum declari a în modul.

Totuși, deoarece variabilele importate sunt active vederi, ele se modifică în funcție de variabila exportată „brută” din exports. Luați în considerare următorul cod (împrumutat din articolul de referință de mai jos):

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

După cum puteți vedea, diferența se află cu adevărat în lib.js, nu în main1.js.

În rezumat:

  • Nu puteți atribui valori variabilelor import-ate, indiferent de modul în care declarați variabilele corespunzătoare în modul.
  • Semantica tradițională let-vs-const se aplică variabilei declarate în modul.

    • Dacă variabila este declarată const, nu poate fi reatribuibilă sau legată în altă parte.
    • Dacă variabila este declarată let, ea poate fi reasignată doar în modul (dar nu și de către utilizator). Dacă este modificată, variabila import-ată se schimbă corespunzător.

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