gpt4 book ai didi

javascript - javascript变量是如何引用的?

转载 作者:行者123 更新时间:2023-12-05 01:05:44 26 4
gpt4 key购买 nike

我目前正在学习技术面试,并且正在经历 leetcode 的磨练。我遇到了一个问题,我即将面试的公司显然经常问这个问题,所以我尝试了一下。我不太明白,所以我查看了解决方案并遇到了这个解决方案。

var merge = function(intervals) {
if(!intervals.length) return intervals;
intervals = intervals.sort((a,b) => a[0] - b[0])

let prev = intervals[0];
let res = [prev];

for(let curr of intervals){
if(curr[0] <= prev[1]){
prev[1] = Math.max(prev[1], curr[1]);
} else {
res.push(curr);
prev = curr;
}
}

return res;
};

在第 5 行,res 设置为等于 [prev],在本例中为 [1,3] 所以

res = [[1,3]]

暂时。

然后随着代码的进行,注意 prev 的值是如何更新的。我认为这很奇怪,因为 res 根本不会更新,但是通过更新 prev 的值, res 中的 prev 也会更新。我的问题是:

更新 prev 的值如何更新 res 内部的 prev 的值?我以为我快疯了,所以我测试了它,这个解决方案奏效了。我认为一旦分配了 res 中的 prev ,它将是不可变的?我在这里遗漏了什么吗?

最佳答案

let prev = intervals[0];
let res = [prev];

此时,res[0]previntervals[0]都具有相同的值。

console.log(prev === res[0]); // true
console.log(prev === intervals[0]); // true
console.log(res[0] === intervals[0]); // true

如果这个值引用了一个对象,那么它们都指向该对象。如果您要重新分配 prev,那么 不会 修改 res[0],也不会修改 intervals[0]

prev = 'something else';
console.log(prev === res[0]); // FALSE
console.log(prev === intervals[0]); // FALSE
console.log(res[0] === intervals[0]); // true

How does updating the value of prev update the value of the prev that's inside res?

通过这个例子可以看出,更新prev的值实际上并没有更新res[0]的值。

但是,更新 prev[1] 的值实际上是更新 prev 引用的对象/数组的索引 1 的值.换句话说,你不是通过设置 prev[1] = 来改变 prev... 你是在改变 prev[1],与 res[0][1] 相同。

关于javascript - javascript变量是如何引用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70408122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com