1.代码段1
{100:a=100} = {101:a=111} //输出 {101:111} a=100
{101:a=100} = {100:(a=111),101:a=112} //输出 {100: 111, 101: 112} a=112
解释:
{ 100: a=1 }整体的,是一个赋值模板(解构赋值的模板)的声明,是声明语法,不是执行。它就是声明了属性名100对应于一个变量名a。所以才有{ 100: a } = x的语法效果将是a = x[100]。注意,对于左侧的赋值模板来说,是“声明”语义,而不是“执行”。
所以在代码{ 100 : a = 1 }中,a = 1是缺省值“声明”。因此,对于代码{ 100: a = 1} = x来说,当x[100]这个属性不存在的时候,a使用缺省值1,就ok了啊。所以你参考两个foo()声明中,a = 1的语义解释是完全一样的:
function foo(a = 1) { ... }
function foo({100: a = 1}) { ... }