You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Теперь, если в лексическом окружении не используется переменная, то движок её не видит
Примеры:
Здесь мы не используем переменную value1 в локальном лексическом окружении, связанном с функцией f, и движок её не видит
let value = "Сюрприз!";
function f() {
let value1 = "значение1";
let value = "ближайшее значение";
function g() {
console.log(value)
// alert(value1) в консоли НЕ выведет "значение1"
debugger;
}
return g;
}
let g = f();
g();
Теперь мы используем переменную value1 в локальном лексическом окружении, связанном с функцией f, и движок её видит
let value = "Сюрприз!";
function f() {
let value1 = "значение1";
let value = "ближайшее значение";
function g1() {
console.log(value1)
}
function g() {
console.log(value)
// alert(value1) в консоли выведет "значение1"
debugger;
}
return g;
}
let g = f();
g();
По поводу примера из статьи: в safari, даже когда значение не используется, движок корректно сохраняет свойство лексического окружения (переменную)
The text was updated successfully, but these errors were encountered:
Это не "теперь", а уже несколько лет как. V8 здесь не отслеживает судьбу созданных функций (в частности, пофиг что функция g1 из последнего примера поедет сразу в GC). Всё просто: упоминается переменная - пожалуйста в общее замыкание (в примере - общее для функций g и g1).
В статью можно добавить, что eval('...') добавляет в замыкание все переменные, без разницы, упоминаются они или нет.
Соавтор нахождения и объяснения причины особенностей движка: @mirageN1349
Пример с особенностью движка в конце статьи теперь не работает (https://learn.javascript.ru/closure)
Теперь, если в лексическом окружении не используется переменная, то движок её не видит
Примеры:
По поводу примера из статьи: в safari, даже когда значение не используется, движок корректно сохраняет свойство лексического окружения (переменную)
The text was updated successfully, but these errors were encountered: