javascript - explícame - ¿Cuándo debería usar let y var?
javascript let vs var (3)
Bueno, la respuesta es bastante simple: use var
si necesita un alcance de función y let
que necesite un alcance de bloque.
EDIT: ¡por favor lea la pregunta! Ya sé la diferencia. Esto no es un duplicado
Obviamente, ahora mismo siempre debería estar usando la palabra clave var
ya que let
no es compatible con todo.
Cuando la palabra clave let tiene mejor soporte (por ejemplo, estoy escribiendo una aplicación Node en un par de años que usa Harmony), ¿cuándo debería usar la palabra clave let
frente a la palabra clave var
?
Entiendo la diferencia: var
es para el alcance de funciones mientras let
para enfoque de bloques, pero estoy buscando algo como "siempre use la palabra clave let
" o "use la palabra clave var
en la parte superior de las funciones, pero la palabra clave let en bloques como para bucles ".
Diría que, como principio, debe usar let
siempre que no sea inconveniente hacerlo. Como:
for (let i = 0; i < 100; i++) {
// Do something
}
if (condition) {
let msg = a + b + c;
console.log(msg);
alert(msg);
}
Las ventajas de este enfoque es:
- Menor riesgo de anular algún uso variable global para otra cosa
- Menor riesgo de pérdidas de memoria debido a que las variables permanecen en la memoria mucho después de que se vuelven irrelevantes
Use let como regla general, y var en ocasiones.
El alcance del bloque es la opción estándar y más legible, y facilitará la depuración. El ámbito de bloque hace que sea fácil ver exactamente dónde se encuentra una variable en el alcance. El análisis de funciones hace que las cosas sean mucho menos evidentes, y es mucho más fácil introducir errores accidentalmente con errores de alcance.
En general, cuanto menor sea el alcance que pueda usar, mejor. Por lo tanto, let
pasar var
.
En particular, ayuda a lidiar con el problema interminable de cerrar las variables y no darse cuenta de que su valor cambiará antes de que se ejecute el cierre:
for (var i = 1; i <= 5; i++) {
var item = document.createElement("LI");
item.appendChild(document.createTextNode("Item " + i));
let j = i;
item.onclick = function (ev) {
alert("Item " + j + " is clicked.");
};
list.appendChild(item);
}