簡體   English   中英

為什么我的隨機函數兩次返回相同的值

[英]Why does my random function return the same value twice

上下文:我正在創建一個帶有一些虛擬圖的虛擬網站。 我需要像這樣的類似js對象中的一些隨機值:

object = {
  x: static,
  y: static,
  ...

  data: random
}

所以我想出了這樣的東西:

 async function getOption() { return getRandom(); } async function setup() { let template = { static1: "xx", static2: "xx", option: 1 } let v1 = template; v1.option = await getOption(); let v2 = template; v2.option = await getOption(); console.log(await getOption(), await getOption()) console.log(v1.option, v2.option) } function getRandom() { return Math.floor(Math.random() * 100); } setup() 

但是我注意到一些我不理解的奇怪現象。 如果我想分配一個新的數字,我每次都會得到兩次相同的“隨機”值。 此外,如果我在console.log()調用它,它會按預期工作。

現在我的問題:

N°1:如何創建除1以外具有相同屬性的許多大對象?

N°2:為什么我兩次獲得相同的值? 這對我來說真的沒有意義。 我想念什么嗎?

您有v1=template; v2=template; ,因此v1和v2是同一對象。

如果要復制模板,請使用

v1 = {...template};
v2 = {...template};

v1和v2只是對模板對象的引用。 本質上,v1和v2是相同的。 在這里查看控制台。 v1是一個隨機值,v2也是隨機值,但被v2覆蓋:

 async function getOption() { return getRandom(); } async function setup() { let template = { static1: "xx", static2: "xx", option: 1 } let v1 = template; v1.option = await getOption(); console.log('v1:', v1.option) console.log('template:', template.option) let v2 = template; v2.option = await getOption(); console.log('v2:', v2.option) console.log('template:', template.option) console.log(v1.option, v2.option) } function getRandom() { return Math.floor(Math.random() * 100); } setup() 

編輯:如果您想制作副本,則可以使用assign()

 let template = { static1: "xx", static2: "xx", option: 1 } var obj = Object.assign({}, template); template.option = "100" obj.option = "200" console.log(template.option, obj.option) 

暫無
暫無

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

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