Javascript ES6 експорт const vs експорт нехай


149

Скажімо, у мене є змінна, яку я хочу експортувати. Яка різниця між

export const a = 1;

проти

export let a = 1;

Я розумію різницю між constі let, але коли ви експортуєте їх, які відмінності?


exportдеталі ключових слів тут . Наразі його не підтримує жоден із веб-браузерів.
RBT

Відповіді:


247

В ES6, imports - це перегляди на експортовані значення лише для читання. Як результат, коли ви це робите import a from "somemodule";, ви не можете призначити, aяк би ви не заявляли aв модулі.

Однак, оскільки імпортні змінні є переглядами в реальному часі , вони змінюються відповідно до "сировинної" експортованої змінної в експорті. Розглянемо наступний код (запозичений із довідкової статті нижче):

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

Як бачите, різниця насправді полягає в тому lib.js, що не main1.js.


Узагальнити:

  • Ви не можете присвоювати importзмінним -ed, незалежно від того, як ви заявляєте відповідні змінні в модулі.
  • Традиційна let-vs- constсемантика застосовується до оголошеної змінної в модулі.
    • Якщо змінна оголошена const, вона не може бути переназначена або відновлена ​​ніде.
    • Якщо змінна оголошена let, її можна перепризначити лише в модулі (але не у користувачі). Якщо він змінений, importзмінна -ed змінюється відповідно.

Довідка: http://exploringjs.com/es6/ch_modules.html#leanpub-auto-in-es6-imports-are-live-read-only-views-on-exported-values


2

Я думаю, що після того, як ви його імпортували, поведінка однакова (замість цього ваша змінна буде використана поза вихідним файлом).

Єдина відмінність буде, якщо ви спробуєте перепризначити її до кінця цього самого файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.