JS - 做个小实验,看看『解构赋值』的求值顺序

let [x = 1, y = x] = [2];    // x=2; y=2

上面这条语句的运行结果和我想象的不太一样,我以为的顺序是:

x=1
y=x
x=2 // x=2; y=1

那这个表达式的计算顺序究竟是怎样的呢?看下面:

let [
  x = (_ => console.log('a'))()
] = [
  (_ => console.log('c'))()
];   // 'c' 'a'

打印顺序是 c a,说明是没有对应值时才去拿默认值,仔细想想很合理,只有没有对应值时才需要去计算默认值,先计算默认值会造成多余的计算

单个值的情况清楚了,那多个值呢?

let [
  x = (_ => console.log('a'))(),
  y = (_ => console.log('b'))(),
] = [
  (_ => console.log('c'))(),
  (_ => console.log('d'))(),
];   // 'c' 'd' 'a' 'b'

跟我想象的又不一样,我以为会是 c a d b,仔细想想,好像是因为忘了基本的原则:等号右边的先计算。

再看个例子:

let [
  x,
  y,
] = [
  1,
  (_ => console.log(x))(),
];   // x is not defined

你可能感兴趣的:(JS - 做个小实验,看看『解构赋值』的求值顺序)