До ES 5 у нас был один способ объявления переменных, то есть использование ключевого слова var.
var a;
Далее следует var, область действия. Они остаются доступными на протяжении всей функции. Здесь, в приведенном ниже примере, я объявлен внутри области блока, но доступен для всех.
for (var i = 0; i < 10 ; i++){ console.log(i); // 0 to 9 }console.log("Outside"); // Outside console.log(i); // 10
Внутри приведенного ниже фрагмента кода var i объявляется внутри функции и будет соответствовать области действия функции. Следовательно, он не будет доступен вне функции.
function test(){ for (var i = 0; i < 10 ; i++){ console.log(i); // 0 to 9 } console.log("Loop Ends"); // Loop Ends console.log(i); // 10 } test(); console.log("Outside"); // Outside console.log(i); // Uncaught ReferenceError: i is not defined
Проблема с варом?
глобальная область действия или функция/локальная область действия
var
переменные могут быть повторно объявлены и обновлены внутри одной и той же области действия, и это не вызовет ошибки.
function test(){ var a =10; console.log(a); // 10 if(true){ var a=20; console.log(a); // 20 } console.log(a); // 20 }
var поднят —переменные var могут быть подняты. Перейдите по этой ссылке, чтобы узнать о подъеме. Это делается для того, чтобы убедиться, что они объявили переменные до того, как получили значение. Но также для предотвращения глобального доступа к переменным.
console.log (i); var i = 10 // Undefined Error
i
переопределяется на 10. Это не проблема, если вы хотите переопределить i
, но это становится проблемой, когда вы не понимаете, что переменная i
уже была определена.
Если вы использовали i
в других частях вашего кода, вы можете быть удивлены полученным результатом. Это может привести к множеству ошибок в вашем коде.
Переобъявление снова —с помощью var мы можем повторно объявить переменные.
var i = 10; console.log (i); // 10 var i = 20; console.log (i); // 20
Позже изменена переменная с var, определенной строкой, а позже переназначенной на целое число, а позже она может быть функцией.
var i = 10; console.log (i); // 10 function test(){ i = 'Aastha'; console.log (i); // Aastha } test()
Дает undefined- использование переменной var без определения и объявления дает undefined.
console.log(i); // undefined var i = 10;
А вот пусть и const
позволять
В ES6 Let и const появились как улучшение объявлений var
. Это также решает проблему масштабирования.
Let имеет область действия блока. Блок определяется {}. Таким образом, переменная, объявленная в блоке с let
, доступна для использования только внутри этого блока.
for (let i = 0; i < 10 ; i++){ console.log(i); // 0 to 9 } console.log("Outside"); // Outside console.log(i); // Uncaught ReferenceError: i is not defined
Если let определен внутри функции, он будет работать так же, как var внутри функции. Следите за областью действия.
function test(){ for (var i = 0; i < 10 ; i++){ console.log(i); // 0 to 9 } } test(); console.log("Outside"); console.log(i); // Uncaught ReferenceError: i is not defined
Пусть переменные не могут быть подняты.
i = 10; console.log(i); // Uncaught ReferenceError: i is not defined let i;
Разрешить обновление переменных, но их нельзя повторно объявить.
let i = 10; i =20; console.log(i); // 20 let i =30; console.log(i); // Uncaught SyntaxError: Identifier 'i' has already been declared
Uncaught ReferenceError – использование переменной var без определения и объявления приводит к ошибке Uncaught Reference Error.
console.log(i); let i = 10; // Uncaught ReferenceError: i is not defined
константа
const
— это сокращение от константа. Переменные, назначенные ключевым словом const
, не могут обновляться или повторно объявляться. Они доступны только для чтения.
const i = 10; i = 1; console.log(i); // TypeError: Assignment to constant variable.
Но мы можем обновить константный объект.
const i = { Name : "Aastha", Age : 21 } console.log(i); // {Name: "Aastha", Age: 21} i.Name = "Aastha Gupta" i.Age = 23 console.log(i);// {Name: "Aastha Gupta", Age: 23}
Оставлять инициализацию нельзя, они должны быть инициализированы в момент объявления
const i; console.log(i); // SyntaxError: Missing initializer in const declaration
Const следует за областью блока
if (true) { const i = 10; } console.log(i); // ReferenceError: i is not defined
переменная const не может быть поднята
i = 10; console.log(i); // Uncaught ReferenceError: i is not defined const i;
Uncaught ReferenceError – использование переменной var без определения и объявления приводит к ошибке Uncaught Reference Error.
console.log(i); const i = 10; // Uncaught ReferenceError: i is not defined
Вот и все!!!