Sobes.tech
Junior

Каква е разликата между затваряне и обхват?

sobes.tech AI

Отговор от AI

Затварянето е функция, която запомня околната среда (лексикалната област на видимост), в която е създадена, дори ако се изпълнява извън тази област. Това й позволява да получава достъп до променливи от родителската област на видимост.

Област на видимост — това е областта на програмата, в която е видима определена променлива или функция и до която може да се осъществи достъп. В JavaScript съществуват глобална, функционална и блокова области на видимост.

Основна разлика:

  • Област на видимост определя къде променливата или функцията е достъпна по време на компилация (или парсинг).
  • Затваряне позволява на функцията да запази достъп до променливи от своята област на видимост след като тази област е приключила изпълнението си.

Пример за област на видимост:

// Глобална област на видимост
let globalVar = "Аз съм глобална";

function myFunction() {
  // Функционална област на видимост
  let functionVar = "Аз съм функционална";
  console.log(globalVar); // Достъпно
}

// console.log(functionVar); // Грешка ReferenceError: functionVar не е дефинирана

Пример за затваряне:

function createCounter() {
  let count = 0; // Променлива в областта на видимост на createCounter

  return function() { // Това е затваряне
    count++; // Има достъп до count от родителската област на видимост
    console.log(count);
  };
}

const counter = createCounter();
counter(); // Ще изведе 1 (стойността на count се запазва)
counter(); // Ще изведе 2 (стойността на count се запазва)
// console.log(count); // Грешка ReferenceError: count не е дефинирана

В този пример вътрешната функция (затварянето) запазва достъп до променливата count, дори след като createCounter е приключила изпълнението си. Това е възможно благодарение на затварянето.

Сравнение:

Характеристика Област на видимост Затваряне
Какво определя Къде променливите и функциите са достъпни Начинът, по който функцията запазва достъп до променливи от родителската област на видимост
Кога е активно По време на компилация (лексикално обкръжение) По време на изпълнение на функция, създадена в друга област на видимост
Връзка Затварянето зависи от областта на видимост, в която е създадено Областта на видимост — това е фундаментално понятие за определяне на достъпността