La semántica de varylet
vary letson una declaración para la máquina y para otros programadores:
Tengo la intención de que el valor de esta asignación cambie en el transcurso de la ejecución. No confíe en el valor eventual de esta asignación.
Implicaciones de usar varylet
vary letobligar a otros programadores a leer todo el código intermedio desde la declaración hasta el uso final, y razonar sobre el valor de la asignación en ese punto de la ejecución del programa.
Debilitan el razonamiento de la máquina para que ESLint y otros servicios de idiomas detecten correctamente los nombres de variables mal escritas en asignaciones posteriores y la reutilización del alcance de los nombres de variables de alcance externo donde el alcance interno olvida declarar.
También hacen que los tiempos de ejecución ejecuten muchas iteraciones en todas las rutas de código para detectar que en realidad son, de hecho, constantes, antes de poder optimizarlas. Aunque esto es menos problemático que la detección de errores y la comprensión del desarrollador.
Cuándo usar const
Si el valor de la referencia no cambia en el transcurso de la ejecución, la sintaxis correcta para expresar la intención del programador es const. Para los objetos, cambiar el valor de la referencia significa apuntar a otro objeto, ya que la referencia es inmutable, pero el objeto no.
" const" objetos
Para referencias de objeto, el puntero no se puede cambiar a otro objeto, pero el objeto que se crea y se asigna a una constdeclaración es mutable. Puede agregar o eliminar elementos de una constmatriz a la que se hace referencia y mutar claves de propiedad en un constobjeto referenciado.
Para lograr objetos inmutables (que de nuevo, hacen que su código sea más fácil de razonar para humanos y máquinas), puede hacer Object.freezeel objeto en la declaración / asignación / creación, de esta manera:
const Options = Object.freeze(['YES', 'NO'])
Object.freeze tiene un impacto en el rendimiento, pero su código probablemente sea lento por otras razones. Quieres perfilarlo.
También puede encapsular el objeto mutable en una máquina de estado y devolver copias profundas como valores (así es como funcionan los estados de Redux y React). Consulte Evitar el estado global mutable en Browser JS para ver un ejemplo de cómo construir esto desde los primeros principios.
Cuando vary letson un buen partido
lety varrepresentan estado mutable. En mi opinión, solo deberían usarse para modelar el estado mutable real . Cosas como "¿ está viva la conexión? ".
Estos se encapsulan mejor en máquinas de estado comprobables que exponen valores constantes que representan " el estado actual de la conexión ", que es una constante en cualquier momento, y en lo que está realmente interesado el resto del código.
La programación ya es bastante difícil con la composición de efectos secundarios y la transformación de datos. Convertir cada función en una máquina de estado no comprobable creando un estado mutable con variables que solo acumulan la complejidad.
Para una explicación más matizada, vea Shun the Mutant - The case forconst .