Подтвердить что ты не робот

Javascript ES6 export const vs export let

Скажем, у меня есть переменная, которую я хочу экспортировать. Какая разница между

export const a = 1;

против

export let a = 1;

Я понимаю разницу между const и let, но когда вы их экспортируете, каковы различия?

4b9b3361

Ответ 1

В ES6, import отображаются в режиме реального времени только для чтения по экспортированным значениям. В результате, когда вы выполняете import a from "somemodule";, вы не можете назначить a независимо от того, как вы объявляете a в модуле.

Однако, поскольку импортированные переменные представляют собой представления Live, они изменяются в соответствии с экспортируемой в экспортируемой переменной "raw". Рассмотрим следующий код (заимствованный из справочной статьи ниже):

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

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

Единственное различие заключается в том, что вы попытаетесь переназначить его до конца этого самого файла.

Ответ 3

проблема в том, что когда я запускаю страницу, ничего не происходит, и когда я открываю консоль, она говорит Uncaught SyntaxError: в объявлении const отсутствует инициализатор, это указывает на обратный вызов const (millis) => let lastTime; const callback (millis) => {if (lastTime) {this.update((millis - lastTime)/1000);} lastTime = millis; requestAnimationFrame (callback);}; callback();