未通过引用调用来获取函数返回对象值

时间:2018-04-13 08:26:22

标签: javascript redux pass-by-reference

现在我实现了在用户组中查找用户的功能。这些是嵌套组,因此搜索是通过递归调用实现的。我的代码列在下面;我也使用redux。

我使用searchGroupUserAcc调用搜索来获取包含指定用户的目标组。我已经确认参数targetGroup已正确分配,但在搜索完成后我还不知道它的值为{}。

我很困惑;欢迎所有的想法。感谢。

function search(groups)(groups, tokenAcc, targetGroup){
    ...
    //search in a group; g is one group is groups
    for(let i=0;i<g.userList.length;++i) {
        if(g.userList[i]===tokenAcc) {
            //confirmed that targetGroup's value is not{}
            targetGroup=JSON.parse(JSON.stringify(g));
            return;
        }
    }
    //for searching subGroups 
    search(...);

}

//tokenAcc is the user account key used to search in the group array.
export function searchGroupUserAcc(tokenAcc){
     return (dispatch)=>{
         ...
         let targetG={};
         //use tokenAcc to search in groups. every group in groups contains the useraccount info
         //expect targetG to hold the return value.
         search(tokenAcc, groups,targetG);
         console.log(targetG);//still prints{}, but why
     };
}

2 个答案:

答案 0 :(得分:0)

Hy Buddy。

Javascript总是按值传递,但是当变量引用对象时,“value”是对象的引用。

因此,如果更改变量的值永远不会更改基础图元或对象,则只需将变量指向新的图元或对象。

答案 1 :(得分:0)

为什么不直接从search函数返回值?

if(g.userList[i]===tokenAcc) {
  return JSON.parse(JSON.stringify(g));
}

然后在你的第二个函数中:targetG = search(tokenAcc, groups,targetG);

修改

鉴于您正在使用redux,我强烈建议您转向更多功能性方法,除其他外,这意味着您避免副作用(即你现在正在做什么)并始终使用函数的返回值。有关它的更多信息,请查看官方redux documentation