Я хотел бы обратиться к
- Контекст
- этот контекст (связь с контекстом)
- Область
1: контекст выполнения
JavaScript - это однопоточный язык, то есть одновременно может выполняться только одна задача. Когда интерпретатор JavaScript первоначально выполняет код, он сначала входит в глобальный контекст выполнения по умолчанию . Каждый вызов функции с этого момента приведет к созданию нового контекста выполнения.
Здесь часто возникает путаница, термин контекст выполнения фактически означает все намерения и цели, относящиеся скорее к сфере, а не к контексту. Это неудачное соглашение об именах, однако это терминология, определенная спецификацией ECMAScript, поэтому мы как-то застряли с ней.
Каждый раз, когда создается новый контекст выполнения , он добавляется к вершине стека выполнения. Браузер всегда будет выполнять текущий контекст выполнения, который находится поверх стека выполнения. После завершения он будет удален из верхней части стека, и элемент управления вернется в контекст выполнения ниже.
Контекст выполнения можно разделить на этап создания и выполнения. На этапе создания интерпретатор сначала создает переменный объект (также называемый объектом активации), который состоит из всех переменных, объявлений функций и аргументов, определенных в контексте выполнения. Оттуда цепочка областей действия инициализируется следующим, и значение этого определяется последним. Затем на этапе выполнения код интерпретируется и выполняется.
2: этот контекст
Что такое «этот» контекст?
Контекст чаще всего определяется тем, как вызывается функция. Когда функция вызывается как метод объекта, это устанавливается для объекта, для которого вызывается метод:
var obj = {
foo: function() {
return this;
}
};
obj.foo() === obj; // true
Тот же принцип применяется при вызове функции с оператором new для создания экземпляра объекта. Когда вызывается таким образом, значение этого в рамках функции будет установлено на вновь созданный экземпляр:
function foo() {
alert(this);
}
foo() // window
new foo() // foo
При вызове в качестве несвязанной функции по умолчанию используется глобальный контекст или объект окна в браузере. Однако, если функция выполняется в строгом режиме, контекст по умолчанию будет неопределенным.
3: переменная область действия
Переменная может быть определена либо в локальной, либо в глобальной области действия , которая устанавливает доступность переменных из разных областей во время выполнения. Любая определенная глобальная переменная, означающая, что любая переменная, объявленная вне тела функции, будет жить во время выполнения и может быть доступна и изменена в любой области видимости. Локальные переменные существуют только в теле функции, для которого они определены, и будут иметь различную область видимости для каждого вызова этой функции. Там он подлежит присваиванию значений, извлечению и манипулированию только внутри этого вызова и недоступен за пределами этой области.
ECMAScript 6 (ES6 / ES2015) ввел ключевые слова let и const , которые поддерживают объявление локальных переменных области блока. Это означает, что переменная будет ограничена областью действия блока, в котором она определена, например оператором if или циклом for, и не будет доступна вне открывающих и закрывающих фигурных скобок блока. Это противоречит объявлениям var, которые доступны вне блоков, в которых они определены. Разница между let и const заключается в том, что объявление const, как следует из названия, является константой - ссылка только для чтения на значение. Это не означает, что значение является неизменным, просто идентификатор переменной не может быть переназначен .
Для других тем:
GC: * 1057 * GC
Прототипирование: Прототипирование