0

En javascript, aunque siendo mala práctica, podemos definir una variable como global y disponible desde cualquier contexto, declarandola sin la palabra clave var, asi:

nombreVariable = valor;

El problema es de esto es que se asigna como una "var", y que pasa si quiero asignarla como const o let ? y además quién controla este comportamiento ? es modificable o totalmente nativo ? y si fuese nativo que debo modificarlo con c++ en cada navegador ?

Eduardo Sebastian
  • 4,908
  • 7
  • 30
  • 70
  • Duplicado ? Nisiquiera se asemeja a esa pregunta – Eduardo Sebastian Nov 20 '17 at 14:29
  • @EduardoSebastian Hasta donde sé, lo que quieres hacer no se puede hacer (y se explica en esas preguntas, de ahí que dijera que parece un duplicado); pero aunque se pudiera hacer, ¿seguro que quieres redefinir el comportamiento estándar de JavaScript? Podría convertirse en una pesadilla de mantenimiento rápidamente. – Alvaro Montoro Nov 20 '17 at 15:22
  • La mayoría de mis preguntas son para conocimiento y no para un proyecto – Eduardo Sebastian Nov 20 '17 at 16:17
  • No digo que no esté bien hacer preguntas teóricas. Te podría escribir una respuesta, pero es "complejo" porque si no me equivoco, para hacer esto tendríamos que compilar tu propia versión del navegador (que no es posible en todos los navegadores) y tendría los problemas mencionados arriba. – Alvaro Montoro Nov 20 '17 at 19:56
  • Entonces es solamente posible de forma nativa? – Eduardo Sebastian Nov 20 '17 at 20:03
  • @EduardoSebastian hasta donde sé, sí, esa sería la única forma... pero hay muchas cosas que no sé :) – Alvaro Montoro Nov 20 '17 at 20:07

1 Answers1

1

Como indicas, si usas una variable sin especificar el tipo, se hará como una variable global.

En ese escenario (al ser el alcance global) let y var serían más o menos equivalentes. No se podría definir usando la palabra reservada const (o let o var) porque entonces entraría en juego el ámbito y el alcance de la variable (el bloque para const y let o la función para var).

Es el motor de JavaScript el que controla ese comportamiento y es nativo al navegador, por lo que no es algo que se pueda redefinir (como se podría hacer con algunos métodos rescribiendo el prototipo).

Algo que podrías hacer es, obtener el código de un navegador de código abierto (p.e. Chromium), modificar el código fuente del motor de JavaScript para que let y const funcionen como quieres y construir tu propia versión (pregunta de SO en inglés sobre el tema).

Pero como te ponía en un comentario, con esto generarías un navegador que maneja y funciona de forma diferente al estándar, lo que podría llevar a confusiones y problemas de mantenimiento.

Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179