簡體   English   中英

為什么我在運行此函數時更改了作為參數傳遞的變量的值?

[英]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 沒有通過引用傳遞,所以我真的很困惑。 如果您回答這個問題,在此先感謝!!!

所以每個對象都通過一個引用傳遞。 基元甚至被“包裝”在函數和默認屬性(如 .toString() 或 .length)的對象處理程序中......不同之處在於基元被視為復制值到新對象中,而常規對象/函數通過它們的引用傳遞. 所以在修改對象時 - 請記住它們總是通過引用傳遞。

如果您想從對象獲取數據,則有 [property1,propert2] = 雷達析構模式,您可以在其中從對象中提取基元而不是直接修改對象。 正在制作一個新對象 - Object.from(radar)。

現在,mutation 不受歡迎——因為每個人都關心函數式風格和不變性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM