В JavaScript ключевое слово var используется для объявления переменной. Переменные, объявленные с помощью var, имеют область действия функции или глобально, в зависимости от того, где они объявлены. Если вы не инициализируете переменную во время объявления, она будет иметь значение undefined.

var a;
console.log(a); // Output: undefined

Подъем: переменные, объявленные с помощью var, поднимаются наверх своей области видимости. Это означает, что вы можете использовать переменную до того, как она будет объявлена, и она не вызовет ошибку ReferenceError. Вместо этого значение будет undefined.

console.log(x); // Output: undefined
var x = 10;
console.log(x); // Output: 10 // Output: "second value"

Вы можете объявить переменную с одним и тем же именем несколько раз, используя var, и это не вызовет ошибки. Вместо этого значение переменной будет перезаписано.

var x = "first value";
console.log(x); // Output: "first value"

var x = "second value";
console.log(x); // Output: "second value"

Переменные, объявленные с помощью var, относятся к области действия функции, что означает, что они доступны только внутри функции, в которой они объявлены. Если вы попытаетесь получить к ним доступ вне этой функции, вы получите ReferenceError.

function exampleFunction() {
  var b = 10;
  console.log(b); // Output: 10
}

exampleFunction();
console.log(b); // Output: ReferenceError: x is not defined

Глобальная: если переменная объявлена ​​с var вне какой-либо функции, она становится глобальной переменной и доступна из любого места в коде.

var x = "global";
var b = "read-global";

function exampleFunction() {
  console.log(b); // Output: read-global
  console.log(x); // Output: undefined
  var x = "local"; // The local variable a shadows the global variable within the function.
  console.log(x); // Output: "local"
}

exampleFunction();
console.log(x); // Output: "global"

Еще несколько примеров:

for (var i = 0; i < 3; i++) {
  console.log("Inside loop: " + i);
}

console.log("Outside loop: " + i); // Output: "Outside loop: 3"

Использование немедленно вызываемого функционального выражения (IIFE) для создания частной области:

var x = (function() {
  var privateVar = "This is private";
  return "This is public";
})();

console.log(x); // Output: "This is public"
console.log(privateVar); // Output: ReferenceError: privateVar is not defined

Здесь IIFE используется для создания частной области, поэтому переменная privateVar недоступна вне функции.

function globalLeak() {
  leakedVar = "I'm global now";
}

globalLeak();
console.log(leakedVar); // Output: "I'm global now"

В этом примере переменная leakedVar создается без ключевого слова var, что делает ее глобальной переменной.

Использование var с setTimeout:

function delayedLog() {
  for (var i = 0; i < 3; i++) {
    setTimeout(function() {
      console.log(i);
    }, i * 1000);
  }
}

delayedLog(); // Output: 3, 3, 3 (with a 1-second delay between each log)

https://codesandbox.io/s/var-js-np896g?file=/src/index.js Попробуйте сами)