Javascript ES6 const const vs export let


149

Diciamo che ho una variabile che voglio esportare. Qual è la differenza tra

export const a = 1;

vs

export let a = 1;

Capisco la differenza tra conste let, ma quando li esporti, quali sono le differenze?


exportdettagli delle parole chiave qui . Attualmente non è supportato in modo nativo da nessuno dei browser Web.
RBT

Risposte:


247

In ES6, le imports sono viste di sola lettura live sui valori esportati. Di conseguenza, quando lo fai import a from "somemodule";, non puoi assegnarlo aindipendentemente da come dichiari anel modulo.

Tuttavia, poiché le variabili importate sono viste live , cambiano in base alla variabile esportata "grezza" nelle esportazioni. Considera il seguente codice (preso in prestito dall'articolo di riferimento di seguito):

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

Come puoi vedere, la differenza sta proprio nel lib.jsno main1.js.


Riassumere:

  • Non è possibile assegnare importvariabili -ed, indipendentemente da come si dichiarano le variabili corrispondenti nel modulo.
  • La semantica tradizionale let-vs- si constapplica alla variabile dichiarata nel modulo.
    • Se la variabile è dichiarata const , non può essere riassegnata o rimbalzata da nessuna parte.
    • Se la variabile viene dichiarata let, può essere riassegnata solo nel modulo (ma non l'utente). Se viene modificato, la importvariabile -ed cambia di conseguenza.

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


2

Penso che una volta importato, il comportamento sia lo stesso (nel posto in cui la variabile verrà utilizzata al di fuori del file di origine).

L'unica differenza sarebbe se provi a riassegnarlo prima della fine di questo stesso file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.