为什么数组解构可以交换两个变量而没有 temperory 变量

why Array Destructuring can swap two variables without temperory variable

提问人:Ly丶Cooki 提问时间:2/12/2023 更新时间:2/13/2023 访问量:74

问:

我不明白它在幕后是如何工作的,为什么这种方式可以在不使用临时变量来交换两个变量的值的情况下。

    let arr = [1,2];
    let [first,second] = arr;
    [first,second] = [second,first]
    console.log(first,second);  //2,1
JavaScript的

评论

1赞 VLAZ 2/12/2023
您了解常规数组解构的工作原理吗?因为这几乎是这里的全部解释。
0赞 Jeppe 2/12/2023
你怎么知道它没有在幕后使用临时变量?
6赞 pilchard 2/12/2023
它没有使用“临时变量”,但它确实在内存中创建了一个新数组作为解构的目标。[second,first]
0赞 pilchard 2/12/2023
虽然我没有看到它像你一样用来重新分配单个变量,而是翻转数组本身中的索引(这既不透明又更有趣)[arr[0], arr[1]] = [arr[1], arr[0]];
1赞 pilchard 2/13/2023
@SebastianSimon引擎源代码中的计数变量很快变得元,我讨厌认为组装操作在起作用

答:

1赞 Bergi 2/13/2023 #1

在重新分配之前,它确实会从两个交换的变量创建一个临时:数组。此值是匿名的,它没有变量名称,但您可以轻松地引入一个:

const _temp = [second,first];
[first,second] = _temp;

评论

0赞 Ly丶Cooki 2/14/2023
所以很有可能
0赞 Ly丶Cooki 2/14/2023
所以我可以认为它使用这种工作方式。arr=[1,2] [first,second] = arr.now 第一个和第二个变量存储了 1 和 2。[first,second] = [second,first] 我可以将这段代码理解为 [first, second] = [2,1] ;
0赞 Bergi 2/14/2023
@Ly丶Cooki 是的,没错。它首先从变量保存的值构建数组,然后将它们分配回变量。[2, 1]