JS - 做个小实验,看看『解构赋值』的求值顺序
2018-09-16 本文已影响0人
恒星的背影
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