Изучая JavaScript, можно обнаружить, что термин область действия используется повсюду.

Если вы неопытный программист, скорее всего, вы уже имеете представление о том, что это значит, но вы, вероятно, не уверены.

На самом деле это очень глубокая тема, поэтому мы только коснемся ее.

Что такое Сфера?

Проще говоря, когда мы говорим о области действия в JavaScript, мы имеем в виду набор правил для хранения и последующего поиска переменных.

Второе значение области действия — где мы храним и находим заданную переменную.

Итак, в основном мы имеем дело с тремя вопросами:

  • каковы правила хранения переменной?
  • каковы правила поиска заданной переменной?
  • как именно мы организуем эти области?

Сохранение переменной

Когда мы объявляем переменную в JavaScript, мы говорим JavaScript сохранить ее имя и значение, чтобы использовать их позже.

Итак, написав

let myVar;

мы говорим JavaScript что-то вроде:

"Эй, не могли бы вы подготовить для меня переменную с пометкой myVar?"

Теперь, основываясь на авторском коде и ключевом слове объявления, JavaScript знает, где он будет хранить эту переменную, чтобы найти ее в будущем.

Другими словами, JavaScript знает область, где хранить переменную.

Назовем это текущей областью.

Сначала JavaScript проверит, может ли он уже найти переменную с меткой myVar в текущей области видимости.

С объявлениями let или const, если он их найдет, он выдаст SyntaxError, с var он просто остановится на этом.

С другой стороны, если JavaScript ищет и не находит другой переменной с такой же меткой в ​​текущей области, он продолжает делать то, что было задано, и создает новую переменную с меткой myVar внутри текущей области.

Поиск переменной

Что хорошего в том, чтобы что-то хранить и не знать, где ты это хранишь?

Чтобы найти переменную, которую вы объявили ранее, JavaScript должен знать, где искать.

Это происходит всякий раз, когда вы обращаетесь к значению переменной или когда вы его изменяете.

Итак, написав

myVar = 4;
//or
console.log(myVar);

мы говорим JavaScript что-то вроде:

"Эй, ты помнишь переменную myVar, о которой я тебе говорил? Идите и измените его значение на 4».

в первом случае или во втором случае:

«Эй, помнишь myVar? Сообщите мне его значение, чтобы я мог передать его console.log

Несмотря на то, что за кулисами эти два оператора ведут себя по-разному, в обоих случаях правила поиска переменной myVar одинаковы:

Во-первых, JavaScript будет выглядеть в текущей области видимости.

Если он не может найти его там, он будет искать во внешней области видимости, а затем во внешней области видимости и так далее, пока не достигнет глобальной области видимости.

Глобальная область — это просто самая внешняя область. Он не имеет дальнейшей ссылки на какую-либо другую область.

Определение области

До сих пор вас, вероятно, смущал тот факт, что одни прицелы находятся внутри, а другие снаружи. Такой беспорядок…

Как определяются эти области? Что мы имеем в виду, когда говорим, что одна область находится внутри другой? Что тут происходит?!

Думайте об этих областях как о закрытых коробках.

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

Однако в случае с прицелами размер не имеет значения.

Но точно так же, как закрытые ящики внутри друг друга, данный ящик может находиться только непосредственно внутри одного другого ящика.

Коробка не может быть одновременно прямо внутри двух других коробок.

Он может быть внутри коробки, которая находится внутри другой коробки, но никогда не может быть внутри коробки и внутри другой коробки, которая не находится полностью внутри первой.

Еще одна особенность ящиков заключается в том, что закрытый ящик не может быть частично внутри другого закрытого ящика. Либо все включено, либо ничего. То же самое касается прицелов.

Но вы могли бы сказать

«Хорошо, я понял аналогию с коробкой. Но как, черт возьми, эти области формируются в JavaScript? Что представляет собой коробка в этой аналогии?»

И это отличный вопрос, который заслуживает отдельного поста. Так что смотрите Часть II для ответа!

А пока вы можете проверить другой мой контент на JavaScript и Node.js!