为什么解构与Javascript(ES6)中的经典赋值不同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么解构与Javascript(ES6)中的经典赋值不同?相关的知识,希望对你有一定的参考价值。

正如你在这里看到的那样,我们将“fibonacci”设置为“可迭代”对象,然后使用for ...循环它:

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);
            }

正如预期的循环,控制台日志写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(ES6)中的经典赋值不同?的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript ES6 - 解构赋值

JavaScript ES6 - 解构赋值

ES6 中的解构赋值与对象属性访问

JavaScript------解构赋值

ES6中的解构赋值

高级JavaScript第篇