As you can see here we set "fibonacci" as an "iterable" object and we loop on it with a 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);
            }
As expected in for of loop, console log write 1,2,3,5,8,..
BUT
if I write pre = cur; cur = pre + cur; instead of [pre, cur] = [cur, pre + cur];
console.log will write 2,4,8,16,..
Why? Isn't destructuring just a way to set multiple values in a single line? How can we explain the difference in assignation?
pre = cur; cur = pre + cur; 
With the assignment to pre, you lost the old value of pre and the next assignment is wrong.
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];
The destructuring assignment keeps the values until the assignment of the whole array.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With