Контекст выполнения и объект в 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 возвращение, лексическое окружение будет сохранено этим закрытием; подробнее о замыканиях в этом вопросе и его ответах.

Другие вопросы по тегам