使用 JavaScript 进行多个左手分配

var var1 = 1,
    var2 = 1,
    var3 = 1;

这等效于:

var var1 = var2 = var3 = 1;

我相当确定这是变量的定义顺序:var3,var2,var1,它等效于这个:

var var3 = 1, var2 = var3, var1 = var2;

有没有办法在JavaScript中确认这一点?可能使用一些分析器?


答案 1

实际上

var var1 = 1, var2 = 1, var3 = 1;

等同于:

var var1 = var2 = var3 = 1;

区别在于范围:

function good() {
  var var1 = 1, var2 = 1, var3 = 1;
}

function bad() {
  var var1 = var2 = var3 = 1;
}

good();
console.log(window.var2); // undefined

bad();
console.log(window.var2); // 1. Aggh!

实际上,这表明赋值是正确的关联。该示例等效于:bad

var var1 = (window.var2 = (window.var3 = 1));

答案 2

JavaScript中的赋值从右到左工作。.var var1 = var2 = var3 = 1;

如果这些变量中的任何一个的值在此语句之后,则从逻辑上讲,它必须从右侧开始,否则值 or 和 将未定义。1var1var2

您可以将其视为等效于首先计算最里面的括号集的位置。var var1 = (var2 = (var3 = 1));