Глобальный контекст выполнения JavaScript - PullRequest
0 голосов
/ 20 ноября 2018

function callDad () {
  var numb = '0122822122';
  console.log('Calling ' + numb);
}

callDad();

1) Поскольку функция callDad объявлена ​​глобально, она сохраняется в глобальном контексте выполнения перед вызовом.2) После вызова функции callDad создается и выполняется новый контекст выполнения в стеке.

Вопрос: Что происходит с исходной ссылкой на функцию в глобальном контексте выполнения?Функция хранится дважды в памяти?

Дополнительные вопросы и ответы (для справки) :

Q: @Bergi Спасибо за ответ.Я думаю, что вопрос должен быть: так как глобальный контекст выполнения уже хранит функцию в памяти.Почему новый контекст выполнения имеет новую фазу создания?Спасибо

A: @Ash Фаза создания для переменных внутри тела вызываемой функции, особенно онемела в вашем примере

Q: @Rodrigo Так что, как только функция вызывается, на нее ссылаются изобъект окна?Поскольку ссылка в памяти и фаза создания уже существуют для объявлений функций, то почему они говорят, что каждый новый контекст выполнения имеет новую фазу создания?

A: Да, на функцию всегда ссылаются из оконного объекта.Контекст выполнения - это просто область действия и цепочка областей действия (переменные из других областей в замыканиях).Как только контекст выполнения создан, фаза создания выделяет память для переменных внутри этого контекста.О, и помните, что в JS у вас есть область действия функции, а не область блока.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Что происходит с исходной ссылкой на функцию в глобальном контексте выполнения?

Ничего.Он сохраняется обычно только один раз.

(Могут быть некоторые исключения, когда анализируемая и оптимизированная функция сохраняется несколько раз для разных типов аргументов, но это зависит от реализации и выходит за рамки этого вопроса)

Функция сохраняется в памяти дважды?

Нет.Но контекст выполнения функции сохраняется (и удаляется) несколько раз - так часто, как вы вызываете функцию.

0 голосов
/ 20 ноября 2018

В среде браузера (но не в Node.js) функция будет присоединена к объекту window, поэтому она создается только один раз и остается там.Таким образом, ссылка на функцию остается прежней.

...