Я только знакомлюсь с деструктуризацией (n00b) и слежу за курсом по мастерам внешнего интерфейса.Это выглядит следующим образом:
let [firstVar, secondVar] = ["firstValue", "secondValue"]
Что имеет смысл.Я могу (и проверил), что firstVar
получает значение "firstValue"
, а secondVar
получает значение "secondValue"
.
Что сбивает с толку, так это то, что я не могу переназначить значения, хранящиеся в этих переменных,Я использовал const
и let
(как показано выше) и пытался переназначить переменные.Там, где я объявил переменные, используя const
, ошибка не выдается.Если я играю в консоли браузера, я получаю что-то вроде этого:
const [firstThing, secondThing] = ["first value", "second value"]
console.log(firstThing) // expected output: first value
firstThing = "some new thing"
console.log(firstThing) // expected output: first value
Скриншот этого поведения в консоли FireFox (я перешел к пункту about: blank, чтобы убедиться, что в памяти нет старых переменных):
Опять же, не выдается никакой ошибки (что я обычно ожидаю при попытке переназначить переменную const
.
Если я сделаю следующее, я получу поведение, которое я ожидаю:
[firstThing] = ["some new value"]
// TypeError: invalid assignment to const 'firstThing'
Когда деструктурирование выполнено с использованием let
, я могу (казалось бы) переназначить значение, используя аналогичный синтаксис (заключая переменную и новое значение в скобки).
Редактировать: люди показывают, что они не могут воспроизвести проблему при запуске кода, как показано в их браузере. Я изначально не играл с этим в REPL узла, но при этом получается поведение, которое можно ожидать (пытаясь переназначитьconst
var выдает ошибку, переменные let
подходят для переназначения). На данный момент мне просто любопытно, почему это поведение отличается от моего браузера. Я использую версию 64.0.2.
Чтобы попытаться выяснить это, я просмотрел следующее:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
https://javascript.info/destructuring-assignment
Казалось, что ни один из них не затронул вопрос оприсваивание значений переменным (или объектам), созданным с использованием деструктуризации.Способ, которым я подхожу к этому технически правильно?Я также начинаю знакомиться с сборкой мусора и т. Д. (К которой у меня есть только краткое введение), и поэтому мне интересно, если я использую «технику» переназначения, создающую кучу вещей, которые не собирают мусорили создает странные указатели и т. д., которые могут вызвать проблемы в будущем.