3

Me podrían indicar ¿que es lo que estoy haciendo mal? Según mi criterio el código debería de correr bien pero el problema es que me da un error en el element cuando lo mando a llamar en la primera función para darle un valor, según javascript este debe de llevar una declaración de variable pero esta ya esta puesta como global y ya intente probando con this

const element = ''

const createSpanTag = () => {
  element = document.createElement('span')
  element.setAttribute('id', `stElement${auto}`)
  element.setAttribute('class', 'stElement')
  return element
}
ASASCED
  • 1,218
  • 8
  • 27
  • @JackNavaRow no me funciono de todas formas :( – ASASCED Sep 02 '19 at 18:50
  • el error te da por que no existe `stElement${auto}` – JackNavaRow Sep 02 '19 at 18:51
  • mira esto https://es.stackoverflow.com/questions/106042/var-let-const-o-nada-en-javascript#answer-106067 – Emeeus Sep 02 '19 at 18:51
  • @JackNavaRow sirvio y el stelement esta declarado pero en otro lugar, eso si funciona bien, gracias :) – ASASCED Sep 02 '19 at 18:52
  • tienes un error conceptual,el const defines una variable que no puede ser modificada, al hacer un `document.createElement('span')` estas creando un nuevo objeto y por ello pierde la referencia y te da error de que estas intentando cambiar el valor de una constante – JackNavaRow Sep 02 '19 at 18:53
  • @JackNavaRow si no se porque no pense en eso, olvide totalmente ese detalle, gracias :) – ASASCED Sep 02 '19 at 18:58
  • que tal si cambias la linea `element = document.createElement('span')` por Object.assign(element ,document.createElement('span'));` el codigo no se comprenderia, esta linea asigna el objeto a la referencia del elemento; aunque si es por mi cambiara la palabra const por var – JackNavaRow Sep 02 '19 at 18:58
  • @JackNavaRow es una buena idea, creo que lo implementare – ASASCED Sep 02 '19 at 19:00
  • @JackNavaRow estoy construyendo una libreria y me seria de mucha utilidad que cada vez fuera mas clara – ASASCED Sep 02 '19 at 19:01

1 Answers1

5

Cuando replique tu código en mi maquina el error que arrojo fue este:

Assignment to constant variable.

Este error se produce por que estas usando una const para almacenar un dato que luego lo vas a modificar o manipular para mutar. Los datos o variables const son inmutables, como su nombre lo dice son valores que se mantienen siempre constantes.

Deberías cambiar tu primera linea por un let en vez de un const ahora esto te dará otro error que es por el ${auto} supongo que lo debes tener declarado más arriba de tu código.

let element = ''

Otra forma de solucionar tu problema seria declarando const element dentro del método, con esto podrías asignar sus valores para crear tu elemento sin problemas. Ejemplo:

const createSpanTag = () => {
    const element = document.createElement('span')
    element.setAttribute('id', `stElement`)
    element.setAttribute('class', 'stElement${auto}')
    return element
}

Espero que te sirva mi respuesta. Saludos !.

COMO BUENA PRACTICA

Las variables de tipo const globales se acostumbran a colocar en MAYÚSCULA su nombre. Ejemplo:

const ELEMENT_SPAN = ''
vicasas
  • 1,308
  • 1
  • 11
  • 37