Есть ли способ выполнить множественное назначение и инициализацию с помощью области блока?

Я хотел бы объявить две переменные с областью блока и инициализировать их до того же значения. Было бы неплохо, если бы это сработало, но это не...

{
  let a = b = "wang";
}
console.log("b:", b);

Переменная 'a' имеет область блока, но переменная 'b' не имеет, она имеет функциональную область, как если бы она была объявлена ​​с помощью var.

Есть ли одна линия * способ выполнения этого или мне нужно делать...

let a, b;
a = b = "wang";

* не то, что я бы бросил читаемость под автобусом, чтобы сохранить пару символов, которые вы понимаете, мне просто интересно!

Ответы

Ответ 1

Вы можете сделать это в одном объявлении let следующим образом:

{
  let a = "wang", b = a;
}
console.log("b:", b); //undefined or ReferenceError

Поскольку как a, так и b объявляются с помощью let внутри фигурных скобок, они оба получают область блока. Вы должны сначала назначить a так, чтобы он был назначен, прежде чем назначать его также b.

Ответ 2

Вы можете использовать массив destructuring с fill, чтобы избежать повторения значения:

{
  let [a, b, c, d] = Array(4).fill("wang");
  console.log(a, b, c, d); // "wang", "wang", "wang", "wang"
}
a; // ReferenceError

Ответ 3

Можете ли вы попробовать с

{ let [a, b] = [3, 3]; console.log(a); console.log(b)}

Ответ 4

Назначение происходит справа налево. Итак, оператор let применим только к a, а не b
Все остальные переменные считаются глобальными без оператора var/let, поэтому b будет глобальным