Ответ 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.
- Если переменная объявлена