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

时间:2017-01-09 15:24:37

标签: javascript scope

我想用块作用域声明两个变量并将它们初始化为相同的值。如果以下方法以这种方式工作会很好,但它不会......

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

变量' a'有块范围但可变' b'没有,它的功能范围就像用var。

声明一样

是否有一条线路*完成此任务或我必须做...

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

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

4 个答案:

答案 0 :(得分:24)

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

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

因为ab都在大括号内声明let,所以它们都获得了块范围。您必须先分配a,以便在将其分配给b之前分配web.config

答案 1 :(得分:12)

您可以将数组destructuringfill一起使用,以避免重复该值:

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

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

可能是个好主意

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

答案 2 :(得分:2)

你可以试试吗

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

答案 3 :(得分:2)

任务从右到左进行。所以,let语句仅适用于a而不适用b
所有其他变量在没有var / let语句的情况下被视为全局变量,因此b将是全局