2

tengo esta duda respecto a let y var, dentro de estos dos ejemplos utilizando var el codigo arroja 3 pero utilizando let el codigo arroja 2, por que es asi ?

var printNumTwo;
for (var i = 0; i < 3; i++) {
  if(i === 2){
    printNumTwo = function() {
      return i;
    };
  }
}
console.log(printNumTwo());
// returns 3

'use strict';
let printNumTwo;
for (let i = 0; i < 3; i++) {
  if (i === 2) {
    printNumTwo = function() {
      return i;
    };
  }
}
console.log(printNumTwo());
// returns 2
Agusavendaño
  • 303
  • 1
  • 8

1 Answers1

2

VAR


En el primer caso donde la variable tiene definido var el valor de i es de alcance de función, es decir vive y existe tanto dentro de los paréntesis del for como dentro del if por lo cual puede completar el recorrido completo, es decir hacer estas iteraciones

Variable valor
   i       0
   i       1
   i       2
   i       3

Por consola nos devuelve esto

"La letra i vale: 0"
"La letra i vale: 1"
"La letra i vale: 2"
"otro valor3"

Fijate como a pesar de que yo puse un texto diferente dentro del if la continuidad del valor de i dentro de las iteraciones del for sigue por que i tiene un alcance mayor que let por lo cual su valor por cada vuelta no se pierde

LET


Sin embargo cuando la variable es de tipo let su existencia o alcance se limita a existir dentro del bloque for, mira este ejemplo

let printNumTwo;
for (let i = 0; i < 3; i++) {
  console.log("La letra i vale: "+i)
  if(i === 2){
    printNumTwo = function() {
      return "otro valor"+i;
    };
  }
}
console.log(printNumTwo());

Fijate los resultados que me arroja en consola

"La letra i vale: 0"
"La letra i vale: 1"
"La letra i vale: 2"
"otro valor2"

Fijate como el valor de i, una vez que las iteraciones del ciclo for terminan adquiere el valor 2 dentro del condicional if, el cual por cierto si lo cambias por 0 o 1 dentro de i === 2 es el valor que te va a mostrar