有没有办法用块范围进行多次赋值和初始化?

tec*_*oke 17 javascript scope

我想用块作用域声明两个变量并将它们初始化为相同的值.如果下面这样工作会很好但不会......

{
  let a = b = "wang";
}
console.log("b:", b);
Run Code Online (Sandbox Code Playgroud)

变量'a'具有块范围,但变量'b'不具有,它具有函数范围,就好像它是用var声明的一样.

是否有一条线路*实现这一目标或我必须做...

let a, b;
a = b = "wang";
Run Code Online (Sandbox Code Playgroud)

*并不是说我会在公共汽车下扔掉可读性以节省你理解的几个字符,我只是好奇!

Jam*_*rpe 23

您可以在单个let声明中执行以下操作:

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

因为这两个ab与声明let的括号内,他们都得到阻止范围.您必须先分配,a以便在分配之前分配它b.


Ori*_*iol 11

您可以使用数组解构fill避免重复值:

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

如果您不想打扰变量的数量并且不想分配大数组,您还可以使用立即调用的生成器函数表达式.为简单起见,将其实现为辅助函数可能是个好主意

const repeat = function*(value){while(true) yield value};
{
  let [a, b, c, d] = repeat("wang");
  console.log(a, b, c, d); // "wang", "wang", "wang", "wang"
}
a; // ReferenceError
Run Code Online (Sandbox Code Playgroud)