Переменная
A let
или const
может быть только объявлена один раз - то есть, когда у вас есть let <variableName>
в области, вы объявили <variableName>
в этой области и не можете объявитьэто снова в этой области.
Из ранее связанного вопроса :
Когда есть назначение, правая часть анализируется первой;если правая часть выдает ошибку, она никогда не попадает в левую часть, и переменная, объявленная с помощью let, никогда не будет правильно инициализирована;она останется в демилитаризованной зоне / временной мертвой зоне навсегда
Невозможно повторно объявить переменную, которая уже была объявлена, даже если попытка присвоения во время инициализации вызвала ошибку.
Но в строке 4 x = 3 должно выполнить правильное назначение и удалить x из TDZ.Но это также не удается.Я не понимаю, что
После того, как переменная инициализирована (например, let x
выполняется), она может быть назначена.Но точно так же, как вы не можете назначить переменную до ее let
инициализации, вы также не можете назначить переменную позже, когда ее инициализация не завершилась успешно:
x = 'foo';
let x = 'bar';
Ошибка:
Uncaught ReferenceError: x не определен
Это то же самое, чтопроисходит в консоли при попытке:
let x = y
// Uncaught ReferenceError: y is not defined
// x has not been initialized, so the next line throws:
x = 'foo'
// Uncaught ReferenceError: x is not defined
x
все еще не инициализирован, поэтому ошибка такая же.
Встреча такого рода вещи довольно странно, хотя - вы видите это только в консоли.В обычных сценариях сгенерированная ошибка предотвратит дальнейшее выполнение, и тот факт, что имя переменной остается неинициализированным навсегда, не о чем беспокоиться.