что такое подъем?

Если вы начинаете изучать Javascript, возможно, вы уже встречали термин «поднятие флага». Вы можете подумать, что это похоже на поднятие флага? Да, именно так! это нечто поднимается на более высокий уровень.

Подъем — это перемещение объявления переменной и функции в начало области видимости перед выполнением.

В javascript есть два типа подъема

  • переменный подъем
  • Функция подъема

Прежде чем исследовать это, мы должны знать, что такое

  • декларация
  • инициализация/назначение

Важная вещь, которую следует иметь в виду, это то, что javascript только объявления подъема, а не инициализация.

Поднятие переменных:

переменные являются контейнерами для хранения значений данных.

function test()
{
console.log(x);
}
test();
var x;
var y=10;

каков результат этого кода?

undefined

мы знаем, что x объявлен, и ему не присваивается никакого значения, поэтому он не определен.

function test()
{
console.log(y);
}
test();
var x;
var y=10;

к чему это приводит?

undefined

почему это произошло? В предыдущем случае х не содержит никакого значения, следовательно, результат не определен, но здесь у содержит значение 10, но результат не определен.

Здесь начинается переменный подъем…………

Для любого кода javascript движок javascript запускает его, сканируя весь код сверху вниз, приведенный выше код понимается движком js как

var x;
var y;
function test()
{
console.log(y);
}
test();
y=10;

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

x={name:'anu'};
function test()
{
console.log(x.name);
}
test();
var x;

в этом коде значение присваивается вверху и объявляется внизу, здесь оно подвергается переменному подъему и результату

'anu'

Итак, вы поняли, что такое подъем переменных, а затем переходите к подъему функций.

Поднятие функций:

function test()
{
console.log('Hello');
}
var x = function() //anonymous function(function without name)
{
console.log('Everyone');
}
test();
x();

Здесь мы использовали две функции и вызвали эти две функции, результат

'Hello'
'Everyone'

хорошо, теперь внесите небольшие изменения в приведенный выше код и посмотрите, что получится в результате

test();
x();
function test()
{
console.log('Hello');
}
var x = function() //anonymous function(function without name)
{
console.log('Everyone');
}

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

'Hello'

Оба являются функциями, почему печатается только «Привет», а не «Все»?

Поскольку для именованной функции она объявляется и определяется, а для анонимной функции она сначала объявляется, а затем определяется. Приведенный выше код читается javascript как

var x;
function test()
{
console.log('Hello');
}
test();
x();
x=function()
{
console.log('Everyone');
}

Надеюсь, вы получили четкое представление о том, что такое подъем.

Область:

Javascript имеет область действия. Два типа области действия:

  • Локальная область
  • Глобальный масштаб

область видимости определяет доступность (видимость) переменных. Переменные, определенные внутри функций, недоступны (видимы) снаружи функции. Переменные, объявленные внутри функции, становятся локальными для функции.

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

var x=123;  //global scope
function test()
{
var x='anu'; //local scope
console.log(x);
}
test();

это результат

'anu'

если я перепишу код как

var x=123;  //global scope
function test()
{
var x='anu'; //local scope
console.log(window.x);
}
test();

это результат

123

Потому что в контексте браузера global означает window. Давайте возьмем другой пример для ясного понимания,

var x='i am global to test'; //global scope
function test()
{
   var x='i am inside test'; //local scope for test()
   console.log(x);
 
   var x="i am global to newttest";  //globalscope for newTest()
 
 function newTest()
 {
  var x='i am  inside new test'; //local scope for newtest()
  console.log(x);
 }
 newTest();
}
test();

это результат

'i am inside test'
'i am  inside new test'

newTest() доступен только внутри Test(). Мы не можем получить доступ к значениям в newTest() вне функции (области действия).

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

var x='i am global to test'; //global scope
function test()
{
 console.log(x);
 
 function newTest()
 {
  console.log(x);
 }
 newTest();
}
test();

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

'i am global to test'
'i am global to test'

вот так… измените код на свое усмотрение и посмотрите, какая функция обращается к какой переменной.

Я надеюсь, вы получили четкое представление о том, что такое объем.

вывод:

  • Если вы хотите изучить javascript, лучше изучите документацию, а не другие веб-сайты, поэтому просто следуйте javascript mdn.
  • Используйте консоль или playcode.io для тренировки.

Спасибо, что прочитали все это!!! следите за будущими сообщениями от меня.