正如您在这里看到的,我们将“fibonacci”设置为“可迭代”对象,并使用 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保留值直到分配整个数组。
关于javascript - 为什么解构的工作方式不同于 Javascript (ES6) 中的经典赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316973/