为什么在运行此函数时更改作为参数传递的变量的值?

问题描述

function radarconstructor(radar,j){
  let r = radar
  if(j==0){
    r.center[0] = "10%"
  }
  if(j==1){
    r.center[0] = "30%"
  }
  if(j==2){
    r.center[0] = "50%"
  }
  return(r)
}

var radarradar = {
  // shape: 'circle',center:["10%","50%"],//put the radar chart in center
  radius: "50%",name: {
    textStyle: {
        color: '#fff',backgroundColor: '#999',borderRadius: 3,padding: [3,5]
    }
  },axisLine: {   
    linestyle: {
        color: 'rgba(100,100,0.15)'
    }
},splitLine: {
    linestyle: {
        color: 'rgba(255,255,0.1)'
    }
},indicator: [
      { name: 'Dimension1',max: 3},{ name: 'Dimension2',{ name: 'Dimension3',{ name: 'Dimension4',{ name: 'Dimension5',]
}

radarconstructor(radarradar,1) console.log(radarradar.center)#然后显示[“ 30%”,“ 50%”]

我检查了Js没有通过引用,所以我真的很困惑。 预先感谢您回答这个问题!!!

解决方法

因此每个对象都会被引用传递。原始函数甚至在对象处理程序中被“包装”为函数和默认属性,如.toString()或.length...。不同之处在于原始函数被视为复制到新对象中的值,常规对象/函数通过其引用传递。因此,在修改对象时-请记住,它们总是通过引用传递。

如果要从对象获取数据,则可以使用[property1,propert2] =雷达销毁模式,在该模式中,您从对象中拉出基元而不直接修改对象。 还有一个新对象-Object.from(radar)。

如今,变异已不受欢迎-每个人都关注功能样式和不变性。