用逗号分配工作吗?
为什么aaa = 1,2,3工作并将aaa的值设置为1 ? 
 为什么不var bbb = 1,2,3工作? 
 为什么var bbb = (1,2,3)工作并将bbb的值设置为3 ? 

这里有很多事情要做,但基本上,这要归功于逗号运算符 。
逗号运算符评估两个操作数(从左到右)并返回第二个操作数的值。
此代码:
 aaa = 1,2,3 
相当于:
 aaa = 1; 2; 3; 
 因此, aaa被隐式声明并赋值为1.注意,控制台上的输出是最后一条语句3的结果。 
此代码:
 var bbb = 1,2,3 
是语法错误,因为variables声明中的逗号用于在一行中声明多个variables。 正如MDN文章指出的那样,
请注意,
var语句中的逗号不是逗号运算符,因为它不存在于expression式中。 相反,var语句中的一个特殊字符可以将多个字符组合成一个字符。
所以这个代码大致相当于:
 var bbb = 1; var 2; var 3; 
 当然, 2是不是一个有效的标识符,所以它在这一点上失败。 
此代码:
 var bbb = (1,2,3) 
与第一个非常相似,除了因为数值被括在圆括号中,他们首先被评估。 所以这是等同于:
 1; 2; var bbb = 3; 
逗号在Javascript中有多种用法。 在expression式中:
 a = 1, 2, 3; 
 这是一个运营商,只是简单地返回它的右边的论点。 但它也是var声明的一部分,它们是: 
 var var1 [ = val1 ], var2 [ = val2 ], var3 [ = val3 ], ...; 
  (这意味着该部分是可选的)。 您的var声明在逗号后缺lessvariables名,所以不会parsing。 你可以得到你想要的效果: 
 var a = (1, 2, 3); 
括号将逗号视为操作符而不是variables声明之间的分隔符。
在你的例子中,逗号在两个上下文中使用:
  var语句 
  var语句的语法是: 
 var varname1 [= value1 [, varname2 [, varname3 ... [, varnameN]]]]; 
这里用逗号分隔variables名 – 值对。 以下内容不起作用,因为variables名不能以数字开头(请参见标识符名称 ):
 var bbb = 1, 2, 3; // SyntaxError: Unexpected number 
逗号运算符
逗号运算符评估两个操作数(从左到右)并返回第二个操作数的值。 以下expression式的工作如下:
 aaa = 1, 2, 3; 
-   aaa = 1, 2得到2-  请注意, aaa = 1是首先评估的,因为=具有较高的优先级,
 
-  请注意, 
-   2, 3产量3
 var bbb = (1, 2, 3); 
-  如上所述(1, 2, 3)expression式(1, 2, 3)产生3
-  variablesbbb被赋值为3
在第一种情况下:
aaa = 1,2,3
 逗号作为expression分隔符。 它执行aaa分配,然后计算2并丢弃它,然后计算3并丢弃它。 
在第二:
 var bbb = 1,2,3 
  var关键字告诉Javascript编译器,a之后的下一个应该是另一个variables名。 它没有find,所以它死亡和嘲笑。 
 var bbb = (1,2,3) 
 在这里,编译器首先评估1并忽略它。 然后评估2并忽略它。 然后评估3 ,这是留在堆栈,所以它被分配到bbb 
虽然使用逗号分隔expression式并不常见,但有时在外观方面有用。
 for (i = 0, l = 10; i < l; i++) { console.log(i); }