Sobes.tech
Junior

Какво е обхват в JavaScript?

sobes.tech AI

Отговор от AI

Обхватът (Scope) в JavaScript е контекстът, в който са дефинирани и достъпни променливите и функциите.

Проще казано, той определя къде в кода може да се отнася към променлива или функция.

Съществуват няколко типа обхвати:

  • Глобален обхват (Global Scope): Променливите, обявени извън всяка функция, се намират в глобалния обхват. Те са достъпни от всяко място в кода.
    // Глобална променлива
    let globalVar = "Видима съм навсякъде";
    
    function showGlobal() {
      console.log(globalVar); // Достъпна във функцията
    }
    
    showGlobal();
    
  • Локален (функционален) обхват (Local/Function Scope): Променливите, обявени вътре във функция, са в локалния обхват на тази функция. Те са достъпни само вътре в нея и в вложените функции, но не отвън.
    function showLocal() {
      // Локална променлива
      let localVar = "Виждам само тук";
      console.log(localVar);
    }
    
    showLocal();
    // console.log(localVar); // Грешка: localVar не е дефинирана
    
  • Обхват на блок (Block Scope): Въведен в ES6 (ES2015) с let и const. Променливите, обявени с let или const вътре в скоби ({}), например в блокове код, цикли или условия, имат обхват на блок. Променливите, обявени с var, нямат обхват на блок.
    if (true) {
      // Променлива с обхват на блок
      let blockVar = "Видима само в този блок";
      console.log(blockVar);
    }
    
    // console.log(blockVar); // Грешка: blockVar не е дефинирана
    
    for (let i = 0; i < 2; i++) {
      // Променлива с обхват на блок в цикъла
      console.log(i);
    }
    
    // console.log(i); // Грешка: i не е дефинирана (ако е използвано let)
    

Важно е също така да разберем концепцията за верига на обхвати (Scope Chain). Когато JavaScript се опитва да намери стойността на променлива, той първо проверява в текущия обхват. Ако не я намери, преминава към външния (родителски) обхват и така нататък, до глобалния обхват. Ако променливата не бъде намерена никъде, се генерира грешка ReferenceError.