var — это функциональная область видимости, она будет использоваться везде в коде, как и глобальная переменная, учитывая несколько значений для этой переменной, но она принимает последнее назначенное значение.

Замыкание – это комбинация функции, заключенной в другую функцию. Другими словами, замыкание дает вам доступ к области действия внешней функции из внутренней функции. В JavaScript, как указано выше, изображение, такое как setTimeout(), тогда setTimeout() не означает закрытие, это просто функция javascript, что бы в этом месте ни было (анонимная функция), это было бы закрытие

это повлияет на закрытие, поэтому в javascript es6 появились let и const.

и let, — это область блока, в которой он будет работать только в { }, поэтому мы можем использовать переменную с тем же именем вне функции, но var это не так

Блочная область let в этом случае означает, что i будет создавать несколько назначенных переменных let за пределами этого цикла, тогда как с var это будет то, что было последним ее значением.

ex:

for (let i = 1; i <= 5; i++) {
  setTimeout(function() {
    console.log(i);
  }, 1000);
}

Это то же самое, что сделать это:

{
  let i = 1;
  setTimeout(function() {
    console.log(i);
  }, 100);
} 

{
  let i = 2;
  setTimeout(function() {
    console.log(i);
  }, 100);
} 

{
  let i = 3;
  setTimeout(function() {
    console.log(i);
  }, 100);
} 

{
  let i = 4;
  setTimeout(function() {
    console.log(i);
  }, 100);
} 

{
  let i = 5;
  setTimeout(function() {
    console.log(i);
  }, 100);
}

Спасибо за потраченное время