Javascript ES6 экспорт const против экспорта пусть


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.