【问题标题】:Why destructuring works differently than in classic assignation in Javascript (ES6)?为什么解构的工作方式与 Javascript (ES6) 中的经典赋值不同?
【发布时间】:2018-08-25 07:09:30
【问题描述】:

正如您在此处看到的,我们将“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,..

为什么?解构不只是一种在一行中设置多个值的方法吗?我们如何解释分配的差异?

【问题讨论】:

    标签: javascript ecmascript-6 destructuring


    【解决方案1】:
    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是一种真正的美。谢谢妮娜!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2018-02-23
    • 1970-01-01
    • 2023-03-26
    • 2020-05-19
    • 2018-06-16
    相关资源
    最近更新 更多