为什么解构的工作方式与 Javascript (ES6) 中的经典赋值不同?
Why destructuring works differently than in classic assignation in Javascript (ES6)?
正如你在这里看到的,我们将 "fibonacci" 设置为一个 "iterable" 对象,我们用 for .. of:
循环它
let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[pre, cur] = [cur, pre + cur];
return { done: false, value: cur }
}
}
}
}
for (var n of fibonacci) {
// truncate the sequence at 1000
if (n > 1000)
break;
console.log(n);
}
正如预期的那样,在 for of 循环中,控制台日志写入 1,2,3,5,8,..
但是
如果我写 pre = cur; cur = pre + cur;
而不是 [pre, cur] = [cur, pre + cur];
console.log 会写成 2,4,8,16,..
为什么?解构不只是一种在一行中设置多个值的方法吗?我们如何解释分配的差异?
pre = cur; cur = pre + cur;
对于 pre
的赋值,您丢失了 pre
的旧值并且下一个赋值是错误的。
pre cur comment values
--- --- ---------------- -------
0 1 start values *
1 1 pre = cur
1 2 cur = pre + cur *
2 2 pre = cur
2 4 cur = pre + cur *
[pre, cur] = [cur, pre + cur];
destructuring assignment 保留值直到整个数组赋值。
正如你在这里看到的,我们将 "fibonacci" 设置为一个 "iterable" 对象,我们用 for .. of:
循环它let fibonacci = {
[Symbol.iterator]() {
let pre = 0, cur = 1;
return {
next() {
[pre, cur] = [cur, pre + cur];
return { done: false, value: cur }
}
}
}
}
for (var n of fibonacci) {
// truncate the sequence at 1000
if (n > 1000)
break;
console.log(n);
}
正如预期的那样,在 for of 循环中,控制台日志写入 1,2,3,5,8,..
但是
如果我写 pre = cur; cur = pre + cur;
而不是 [pre, cur] = [cur, pre + cur];
console.log 会写成 2,4,8,16,..
为什么?解构不只是一种在一行中设置多个值的方法吗?我们如何解释分配的差异?
pre = cur; cur = pre + cur;
对于 pre
的赋值,您丢失了 pre
的旧值并且下一个赋值是错误的。
pre cur comment values --- --- ---------------- ------- 0 1 start values * 1 1 pre = cur 1 2 cur = pre + cur * 2 2 pre = cur 2 4 cur = pre + cur *
[pre, cur] = [cur, pre + cur];
destructuring assignment 保留值直到整个数组赋值。