Контекст выполнения и объект в JavaScript
Есть что-то об объекте, контексте выполнения в JS, что я не понимаю.
Когда мы создаем объект, создает ли он контекст выполнения? поскольку контекст выполнения создается при вызове функции. И если это не так, то объект похож на другие переменные в реальном контексте выполнения?
Спасибо.
1 ответ
Когда мы создаем объект, создает ли он контекст выполнения?
Нет.
поскольку контекст выполнения создается при вызове функции.
Это правда, но создание объекта отличается от вызова функции.
И если это не так, то объект похож на другие переменные в реальном контексте выполнения?
Объект существует в памяти, и ссылка на него существует в любой переменной или свойстве, в котором вы его сохранили. Если вы храните его в переменной, эта переменная хранится в лексическом объекте среды, связанном с контекстом выполнения, в котором переменная была объявлена.
Конкретный пример может помочь:
function foo() {
var n = 42;
var o = {};
console.log(n, o.toString()); // 42, [object Object]
}
foo();
призвание foo
создает контекст выполнения и связанный с ним лексический объект среды. n
а также o
переменные - это привязки, хранящиеся в этой лексической среде. n
значение привязки является примитивным числом 42. o
значение привязки является ссылкой на объект. Сам объект существует в другом месте в памяти.
+ -------------------- + | Контекст выполнения | +1 | Current Lex Env |−−>| Лексическая среда | | (некоторые другие вещи) | + --------------------- + + --- --- --- | + | n: 42 | + -------- + | o |−−>| Объект | | (некоторые другие вещи) | + -------- + + --------------------- +
Но опять же, этот контекст и его лексическое окружение создаются путем вызова foo
, а не путем создания объекта.
однажды foo
возвращает, если в течение foo
контекст выполнения и связанная с ним лексическая среда имеют право на сборку мусора.
Получив немного далеко от вашего вопроса: если бы мы создали закрытие в foo
и сохранил ссылку на него даже после foo
возвращение, лексическое окружение будет сохранено этим закрытием; подробнее о замыканиях в этом вопросе и его ответах.