递归调用中的Javascript按引用传递问题

递归调用中的Javascript按引用传递问题,javascript,debugging,recursion,pass-by-reference,pass-by-value,Javascript,Debugging,Recursion,Pass By Reference,Pass By Value,我正在做反向链接列表问题,但它没有正常运行,因为我认为这是因为javascript如何在reversedLL.next=new Node(ll.data)的同时更改我的head对象因此链表链接不会在头部持久化。当我修改reversedLL时,是否有什么方法可以使head保持不变?我假设您需要将列表反转到位- 功能反转(ll) {if(ll==null)返回 设p=null 设q=ll while(q) {p={data:q.data,next:p} q=q下一步 } ll.data=p.dat

我正在做反向链接列表问题,但它没有正常运行,因为我认为这是因为javascript如何在
reversedLL.next=new Node(ll.data)的同时更改我的
head
对象因此链表链接不会在头部持久化。当我修改
reversedLL
时,是否有什么方法可以使
head
保持不变?

我假设您需要
将列表反转到位-

功能反转(ll)
{if(ll==null)返回
设p=null
设q=ll
while(q)
{p={data:q.data,next:p}
q=q下一步
}
ll.data=p.data
ll.next=p.next
}
const mylist={data:1,next:{data:2,next:{data:3,next:null}}
反向(mylist)

console.log(JSON.stringify(mylist))
reversedLL
head
Oh是同一个对象,而且在
reverse
函数中更新
reversedLL
不会在调用环境中更改它。JavaScript没有传递引用。是的,但由于某种原因,在执行此操作后,
reversedLL
应指向最后一个节点,
head
应指向第一个节点。但是,
head
指向与
reversedLL
相同的节点。同样,如果
reversed
语句更改了
reversed
上下文中的局部变量
reversedLL
,则在
语句末尾对
reversedLL
的赋值。它对调用上下文中的
reversedLL
变量没有影响。我想我已经找到了它失败的原因,
reversedLL
对象没有在调用堆栈中持久化,所以我必须在递归调用
reversedLL=reverse(ll.next,reversedLL)中返回它
const reverseLinkedList = (ll) => {
  const head = new Node();
  const reversedLL = head;
  
  reverse(ll, reversedLL);
  return head.next;
}

const reverse = (ll, reversedLL) => {
  if (ll) {
    reverse(ll.next, reversedLL);
    reversedLL.next = new Node(ll.data);
    reversedLL = reversedLL.next;
  } 
}