goodnameisused 2021-09-02 16:28 采纳率: 100%
浏览 64
已结题

【JavaScript】这是哪出问题了?作用域的问题?

function myFn(arr) {
  const sortedArray = [];
  while (Math.max(...arr) !== 0) {
    const maxTemp = Math.max(...arr);
    const indexTemp = arr.indexOf(maxTemp);
    sortedArray.unshift({
      No: indexTemp,
      counts: maxTemp
    });
    arr[indexTemp] = 0;
  }
  return sortedArray;
}
let temp;
const myobj = {
  f1: Array(3).fill(0),
  f2: Array(3).fill(0)
}
myobj.f1 = [1, 2, 3];
myobj.f2 = [6,23,35];
temp = myobj.f1;
myobj.f1sorted = myFn(temp);
temp = myobj.f2;
myobj.f2sorted = myFn(temp);
console.log(myobj);

为啥myFn函数会改变myobj中f1和f2的值啊?

  • 写回答

5条回答 默认 最新

  • CSDN专家-showbo 2021-09-02 16:34
    关注

    f1和f2是数组为对象,传递进去后是地址引用,非值引用,在函数内的修改也会同时修改外部的f1和f2的值。不想改变原值,可以 JSON.parse(JSON.stringify(temp)) 传一个新数组进去

    
        temp = myobj.f1;
        myobj.f1sorted = myFn(JSON.parse(JSON.stringify(temp)));//////
        temp = myobj.f2;
        myobj.f2sorted = myFn(JSON.parse(JSON.stringify(temp)));////
        console.log(myobj);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月10日
  • 已采纳回答 9月2日
  • 创建了问题 9月2日