Вы когда-нибудь задумывались, что происходит с переменной, когда к ней обращаются еще до ее объявления в javascript?

Что ж… Я уверен, вы уже догадались… Ему присваивается значение undefined и он имеет тип undefined.

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

console.log(xyz); //ReferenceError: xyz is not defined

Но подождите…

Почему, когда вы пытаетесь получить доступ к переменной до ее объявления, Exception(ReferenceError) не генерируется? Вместо этого ему присваивается значение undefined.

Это из-за этого механизма в javascript, который называется Подъем.

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

Итак, в глобальной области следующий код

console.log(xyz); // Undefined
var xyz=“Trying to hoist the variable”.

будет внутренне означать:

var xyz; //Assigned undefined & is of type undefined
console.log(xyz);
xyz=“Trying to hoist the variable”;

То же поведение в случае области действия функция

function hoist()
{
console.log(abc); //undefined
console.log(xyz); //undefined
var xyz=“I will be added to the function scope”;
abc=“I will be added to the global scope”;
}
hoist();
console.log(abc); //“I will be added to the global scope"
console.log(xyz); //ReferenceError: xyz is undefined

Если внимательно присмотреться, переменная abc по-прежнему доступна за пределами области действия функции. Это связано с тем, что переменная abc не объявлена ​​с ключевым словом var.

Таким образом, ключевое слово var определяет область действия переменной. Поскольку переменная abc объявлена ​​без ключевого слова var, она добавляется в глобальную область видимости и доступна везде.

Строгий режим

Если вы не можете допустить использование переменной до ее объявления... не беспокойтесь... Вы можете использовать строгий режим Javascript.

Просто предварите файл кода следующим:

‘use strict’;

Предупреждение. Строгий режим работает по-разному в разных браузерах.