Executando verificação de segurança...
1

JAVASCRIPT: função é lida anter de ser chamada

img

Estou instanciando um objeto da base de dados cru com o let db

Ele é enviado pra uma função que muda valores desse objeto, e retorna o objeto já modificado resetTagColors(db)

E eu to dando console log nas etapas pra ler os valores.

Porem a a variável db quando é lida, já é lida com os valores modificados da função abaixo.

Ele deveria imprimir a versão não alterada, e depois a versão nova, como está no código.

Quando removo as duas últimas linhas, ai sim ele imprime a versão não alterada, a versão cru.

O que está acontecendo? E como posso contornar?

Carregando publicação patrocinada...
0

Cara resumindo bastante... Todo tipo que não é primitivo no javascript ele sempre se passa como referência para o parametro, ou seja, se modificar o parametro dentro da function, o valor referido também é modificado. Quando, são tipo primitivos (inteiro, por exemplo) o javascript sempre passa o valor e nunca a referência e isso nunca acontece..

Para resolver seu problema você deve ou fazer uma copia do object e passar pro function ou reatribuir seu parametro com a modificação ou criar um novo object com os dados do antigo e passar os novos dados

export function refreshDB(db_name) {
    const db = { name: db_name, color: "#000" }
    console.log(db)
    const new_db = resetTagColors(db)
    console.log(new_db)
 }
 
 function resetTagColors(database) {
     return {
         ...database,
         color: ""
     }
  }

(Tentei explicar de uma forma bem resumida, algumas palavras que utilizei, talvez nem sejam adequadas, mas a logica é essa)

link stackoverflow demonstrando o que falei

0
0

Amigo antes de mais nada quero falar que joguei no Chat GPT e ele me deu isso...
se não funcionar avisa que eu faço na mão sem problema...

Parece que você está tendo um problema de referência, ou seja, ao passar o objeto db para a função resetTagColors, você está passando a referência do objeto em memória, e não uma cópia dele. Isso significa que qualquer alteração feita no objeto dentro da função resetTagColors será refletida na variável db também.

Para contornar isso, uma solução seria fazer uma cópia do objeto db antes de passá-lo para a função resetTagColors. Você pode fazer isso usando a função Object.assign, como no exemplo abaixo:

export function refreshDB(db_name) {
  let db = getDatabase(db_name)
  console.log(db)
  let new_db = Object.assign({}, db) // cria uma cópia do objeto db
  new_db = resetTagColors(new_db)
  console.log(new_db)
}