You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何数组解构(Array Destructuring)无需临时变量就能交换两个变量?

数组解构实现变量交换的底层逻辑

你贴的这段代码用的是ES6引入的解构赋值语法,之所以不用自己写临时变量,本质是JS引擎帮你悄悄做了“存临时值”的工作,拆解一下运行步骤就懂了:

先看核心的交换代码:

[first, second] = [second, first]

执行步骤拆解

  1. 先求值右侧的数组字面量:JS引擎会先把[second, first]整个计算出来。此时second的值是2,first的值是1,所以这一步会生成一个临时数组[2, 1]——注意,这一步的所有值都是基于赋值操作开始前的变量状态,不会受后续赋值影响。
  2. 执行左侧的解构赋值:把刚才生成的临时数组的第0位(也就是2)赋值给first,第1位(也就是1)赋值给second。

对比传统临时变量写法

传统交换需要你手动声明临时变量存值:

let temp = first;
first = second;
second = temp;

解构交换的逻辑和这个完全一致,只是JS引擎帮你自动创建了那个临时数组,你不用显式写出来而已。

为什么直接赋值会失败?

如果不用解构或临时变量,直接写first = second; second = first;,第一步会把first改成2,第二步赋值的是已经被修改的first(值为2),最终两个变量都是2,交换失败。而解构的关键就是右侧先完成所有值的计算,再统一赋值给左侧,避免了值被提前覆盖的问题。

再看你完整的代码运行流程:

let arr = [1,2];
let [first,second] = arr; // 解构赋值,first=1,second=2
[first,second] = [second,first] // 核心交换逻辑,如上拆解
console.log(first,second);  //2,1

内容的提问来源于stack exchange,提问作者Ly丶Cooki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:20:19