为何数组解构(Array Destructuring)无需临时变量就能交换两个变量?
数组解构实现变量交换的底层逻辑
你贴的这段代码用的是ES6引入的解构赋值语法,之所以不用自己写临时变量,本质是JS引擎帮你悄悄做了“存临时值”的工作,拆解一下运行步骤就懂了:
先看核心的交换代码:
[first, second] = [second, first]
执行步骤拆解
- 先求值右侧的数组字面量:JS引擎会先把
[second, first]整个计算出来。此时second的值是2,first的值是1,所以这一步会生成一个临时数组[2, 1]——注意,这一步的所有值都是基于赋值操作开始前的变量状态,不会受后续赋值影响。 - 执行左侧的解构赋值:把刚才生成的临时数组的第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
相关产品推荐
相关产品推荐

