提问人:Junshi Wang 提问时间:8/26/2020 更新时间:8/26/2020 访问量:31
为什么我在运行此函数时更改作为参数传递的变量的值?
Why I change the value of variable which I passed as parameter when I run this function?
问:
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, 100, 0.15)'
}
},
splitLine: {
lineStyle: {
color: 'rgba(255, 255, 255, 0.1)'
}
},
indicator: [
{ name: 'Dimension1', max: 3},
{ name: 'Dimension2', max: 3},
{ name: 'Dimension3', max: 3},
{ name: 'Dimension4', max: 3},
{ name: 'Dimension5', max: 3},
]
}
雷达构造函数(radarradar,1) console.log(radarradar.center) #this 然后显示 [“30%”, “50%”]
我检查了 Js 没有通过引用传递,所以我真的很困惑。 如果您回答这个问题,请提前致谢!!
答:
0赞
altruios
8/26/2020
#1
因此,每个对象都由引用传递。基元甚至被“包装”在函数和默认属性(如 .toString() 或 .length )的对象处理程序中......区别在于基元被视为复制到新对象中的值,而常规对象/函数则通过其引用传递。因此,在修改对象时 - 请记住,它们总是通过引用传递的。
如果要从对象中获取数据,则可以使用[Property1,Propert2] = Radar解构模式,从对象中提取基元,而不是直接修改对象。 正在制作一个新对象 - Object.from(radar)。
如今,突变是不受欢迎的 - 因为每个人都是关于功能风格和不变性的。
评论
1赞
Junshi Wang
8/26/2020
哇,我明白了,这真的很有帮助。谢谢!!
评论
r.center