В 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 Попробуйте сами)