learn js в теме про замыкания написано, что функции в момент объявления запоминают окружение, в котором были созданы в специальном свойстве [[Environment]], а затем, при вызове функции из этого свойства создается лексическое окружение. Но как работает то, что функция получает последние значения переменных, а не те, которые существовали на момент её объявления? То есть, например
let a = 5;
function f() {
return a;
}
a = 10;
console.log( f() ); // 10
Если в момент объявления функции она, грубо говоря, запомнила в свойстве [[Environment]] переменную а со значением 5, то каким образом она узнала о том, что значение переменной было изменено? Как это вообще технически происходит? Там же, в уроке, говорится только о том, что функция "получает последние значения переменных, старые значения нигде не сохраняются", но я не понимаю как это работает, при создании лексического окружения в момент вызова функции значения переменных "обновляются", если были изменены?
Могу предположить, что в env’е лежит нечто вроде объекта с переменными в качестве свойств. А вообще можешь попробовать почитать you dont know js. Думаю там есть ответ на твой вопрос. Или ещё можно упороться и залезть в спецификацию языка
В твоём коде нет замыкания. Есть переменная а, которая видна и в функции ф, и вне её
При создании функции в в свойстве [[Environment]], грубо говоря, она запоминает, что а = 5, но при вызове она принимает измененное значение
Нет, не запоминает
Как только функция вызывается тогда и срабатывает то самое замыкание.
Если правильно понимаю, то а 5 это ее окружение. Как только ты вызываешь функцию создаётся замыкание которое внутри функции, поэтому меняется на 10, ибо а 10 попадает в промежуток до вызова и объявление функции
ну тут скорее к тому, что внутри лексического окружения переменная меняется, но не может закрыться до того как последний вызов не завершится
а там уже наотвечали, сорямба
Обсуждают сегодня