Каждый байт программы JavaScript выполняется в этом или ином контексте выполнения. Вы можете думать об этих контекстах как о соседях кода, которые могут указывать каждую строку кода: откуда она и кто является друзьями и соседями. Да, это очень важная информация, потому что у Общества JavaScript есть довольно строгие правила, которые предусматривают, кто может взаимодействовать с кем. Операционный контекст - это сообщество с воротами вместо крошечной двери, которая открыта в нем.
Обычно мы можем называть эти социальные границы как сферу и иметь достаточное значение для законодательства в хартии каждого соседа, которая является цепочкой сфера контекста, о котором мы хотим поговорить. В определенных отношениях соседства код может получить доступ только к переменным в рамках своей цепочки областей. По сравнению с переменными за пределами его соседства, код предпочитает иметь дело с местными (местными, то есть местными).
Любой язык программирования имеет концепцию масштаба. Проще говоря, Scope - это доступный объем переменных и функций, то есть область управления наглядностью и жизненным циклом переменных и функций. Охват JavaScript всегда был точкой знания, который трудно понять в фронт-энде-разработке. Помните несколько слов, чтобы легко решить область JavaScript.
1. "Без применения на уровне блока в JavaScript"
В Java или C#есть прицел на уровне блоков, то есть скобки также являются прицелом.
public static void main () {if (1 == 1) {string name = "семь"; } System.out.println (name);} // Сообщать об ошибке public static void main () {if (1 == 1) {string name = "семь"; } Console.writeLine (name);} // Сообщать об ошибкеБез применения на уровне блоков в JavaScript
function main () {if (1 == 1) {var name = 'Seven'; } console.log (name);} // Выход: семь2. Javascript принимает область функции
В JavaScript каждая функция действует как область применения, и переменные во внутренней области не могут быть доступны извне.
function main () {var innervalue = 'Seven';} main (); console.log (innervalue); // ошибка: uncaught referenceError: innerValue не определено3. Цепочка применения JavaScript
Поскольку каждая функция в JavaScript является областью применения, если появляется вложенная функция функции, появится цепочка областей.
xo = 'alex'; function func () {var xo = "семь"; function inner () {var xo = 'alvin'; console.log (xo); } inner ();} func ();Например, приведенный выше код появляется в цепочке областей, состоящей из трех областей. Если появится цепочка применения, при поиске переменных появится заказ. Для приведенного выше примера:
Когда Console.log (xo) выполняется, его порядок поиска состоит в том, чтобы искать根据作用域链从内到外. Если внутреннего слоя не существует, он постепенно будет смотреть вверх, пока не будет найдено никаких исключений.
4. Цепочка сфера действия JavaScript была создана до выполнения
Объем JavaScript был создан до его выполнения. Когда это будет выполнено в будущем, вам нужно искать только в соответствии с цепочкой областей.
Пример 1:
xo = 'alex'; function func () {var xo = "семь"; функция inner () {console.log (xo); } return inner;} var ret = func (); ret (); // Результат вывода: семьПриведенный выше код уже существует до того, как функция будет вызвана:
Global Scope -> Func Function Scope -> Объем внутренней функции
При выполнении [ret ();], поскольку он относится к внутренней функции, цепочка областей этой функции была определена как: глобальная область сфера действия -> Функциональная область функции -> Внутренняя область функции, поэтому при выполнении [ret ();] переменные будут обнаружены на основе существующей цепочки объема.
Пример 2:
xo = 'alex'; функция func () {var xo = "eirc"; функция inner () {console.log (xo); } xo = 'семь'; вернуть Inner;} var ret = func (); ret (); // Результат вывода: семьПриведенный выше код имеет ту же цель, что и пример 1, и он также подчеркивает, что цепочка областей уже существует до того, как функция будет вызвана:
Global Scope -> Func Function Scope -> Объем внутренней функции
В отличие от выполнения [var ret = func ();] значение переменной xo в масштабах фонда было сброшено на «Семь» из «Eric», поэтому при выполнении [ret ();] позже вы можете найти только «семь».
Пример 3:
xo = 'alex'; function bar () {console.log (xo);} function func () {var xo = "семь"; return bar;} var ret = func (); ret (); // Результат вывода: AlexВ приведенном выше коде две цепочки объема были созданы до выполнения функции:
Global Scope -> Bar Function Scope
Global Scope -> Func Function Scope
При выполнении [ret ();], RET относится к функции стержня, и цепочка сферы функции BAR уже существует: Global Scope -> Область функции BAR, поэтому при выполнении он будет искать на основе существующей цепочки объема.
5. Заявление заранее
Если вы не создаете переменные и используете их непосредственно в JavaScript, сообщается об ошибке:
console.log (xxoo); // Ошибка: Uncaught referenceError: xxOO не определено
В JavaScript, если значение создается без назначения значения, значение не определен, например:
var xxoo; console.log (xxoo); // Выход: не определен в функции, если написано подобным образом: function foo () {console.log (xo); var xo = 'семь';} foo (); // output: не определенПриведенный выше код не сообщает об ошибке, но выводит неопределенные. Причина в том, что до выполнения функций JavaScript они объявят все переменные в них без присвоения значений. Следовательно, эквивалентно приведенному примеру, что функция уже выполнила VAR XO, когда «предварительно скомпилирован»; Таким образом, вывод вышеприведенного кода не определен.
JS - очень интересный язык. Поскольку многие из его функций направлены на работу DOM в HTML, это кажется случайным и немного менее строгим. Однако с непрерывным процветанием и развитием фронтального и подъема узла JS больше не является «языком игрушек» или «расширением CSS» в эпоху JQUERY. Упомянутое в этой статье легко запутаться или неправильно понять для новичков и разработчиков JS, которые прошли через традиционное веб -разработку. Я надеюсь, что эта статья может быть полезна.