如何解决为什么在运行此函数时更改作为参数传递的变量的值?
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)。
如今,变异已不受欢迎-每个人都关注功能样式和不变性。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。