Eksport stałych Javascript ES6 vs eksport let


149

Powiedzmy, że mam zmienną, którą chcę wyeksportować. Jaka jest różnica pomiędzy

export const a = 1;

vs

export let a = 1;

Rozumiem różnicę między consti let, ale kiedy je eksportujesz, jakie są różnice?


exportszczegóły słowa kluczowego tutaj . Obecnie żadna z przeglądarek internetowych nie obsługuje tego natywnie.
RBT

Odpowiedzi:


247

W ES6 importsą to widoki na żywo tylko do odczytu wyeksportowanych wartości. W rezultacie, kiedy to zrobisz import a from "somemodule";, nie możesz przypisać do abez względu na to, jak zadeklarujesz aw module.

Ponieważ jednak zaimportowane zmienne są podglądami na żywo , zmieniają się one zgodnie z „surową” eksportowaną zmienną w eksporcie. Rozważ następujący kod (zapożyczony z artykułu referencyjnego poniżej):

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

Jak widać, różnica naprawdę polega na tym lib.js, że nie main1.js.


Podsumowując:

  • Nie możesz przypisać do importzmiennych przypisanych , niezależnie od tego, jak zadeklarujesz odpowiednie zmienne w module.
  • Tradycyjna semantyka let-vs- constdotyczy zadeklarowanej zmiennej w module.
    • Jeśli zmienna jest zadeklarowana const, nigdzie nie można jej ponownie przypisać ani powrócić.
    • Jeśli zmienna jest zadeklarowana let, można ją ponownie przypisać tylko w module (ale nie użytkownikowi). Jeśli zostanie zmieniony, importzmienna -ed odpowiednio się zmieni.

Źródła: http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values


2

Myślę, że po zaimportowaniu zachowanie jest takie samo (w miejscu, w którym zmienna będzie używana poza plikiem źródłowym).

Jedyną różnicą byłaby próba ponownego przypisania go przed końcem tego samego pliku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.