JavaScript виконання коду JavaScript підключення зовнішнього файлу JavaScript console.log JavaScript змінні і константи JavaScript типи даних JavaScript операції зі змінними JavaScript перетворення даних JavaScript масиви JavaScript умовні конструкції JavaScript цикли JavaScript функції JavaScript область видимості змінних JavaScript замикання і функції IIFE JavaScript Паттерн Модуль JavaScript рекурсивні функції JavaScript перевизначення функцій JavaScript hoisting JavaScript передача параметрів за значенням і за посиланням JavaScript стрілочні функції JavaScript ООП Object JavaScript ООП вкладені об'єкти і масиви в об'єктах JavaScript ООП перевірка наявності і перебір методів і властивостей JavaScript ООП об'єкти у функціях JavaScript ООП конструктори об'єктів JavaScript ООП розширення об'єктів. prototype JavaScript ООП інкапсуляція JavaScript ООП Функція як об'єкт. Методи call і apply JavaScript ООП спадкування JavaScript ООП Ключове слово this JavaScript ООП Object destructuring JavaScript ООП класи JavaScript ООП Date. Робота з датами JavaScript Об'єкт Math. математичні операції JavaScript Об'єкт Array. Робота з масивами JavaScript ООП об'єкт Number JavaScript String JavaScript String Об'єкт RegExp. Регулярні вирази JavaScript String Регулярні вирази в методах String JavaScript String Синтаксис регулярних виразів JavaScript Робота з браузером і BOM JavaScript діалогові вікна JavaScript Історія браузера. об'єкт history JavaScript об'єкт location JavaScript об'єкт navigator JavaScript таймери JavaScript DOM Введення JavaScript DOM Об'єкт document. Пошук елементів JavaScript DOM Властивості об'єкта document JavaScript DOM Об'єкт Node. Навігація по DOM JavaScript DOM Створення, додавання і видалення елементів веб-сторінки JavaScript DOM Об'єкт Element. управління елементами JavaScript DOM Зміна стилю елементів JavaScript події. Введення в обробку подій. JavaScript події обробники JavaScript події. об'єкт Event JavaScript події. поширення подій JavaScript події миші JavaScript події клавіатури JavaScript FORMS. Форми і їх елементи JavaScript FORMS. Кнопки JavaScript FORMS. текстові поля JavaScript FORMS. Прапорці та перемикачі JavaScript FORMS. Список select JavaScript JSON JavaScript зберігання даних. cookie JavaScript зберігання даних. Web Storage JavaScript Collection. Ітератори JavaScript Collection. Генератори JavaScript Collection. Множина Set JavaScript Collection. Map JavaScript Collection. WeakSet і WeakMap JavaScript AJAX. XMLHttpRequest JavaScript AJAX. Відправка даних JavaScript AJAX. Promise в Ajax-запитах

JavaScript область видимості змінних


Всі змінні в JavaScript мають певну область видимості, в межах якої вони можуть діяти.


Глобальні змінні

Всі змінні, які оголошені поза функцій, є глобальними:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
</head>
<body>
<script>
var x = 5;
let d = 8;
function displaySquare(){
 
    var z = x * x;
    console.log(z);
}
</script>
</body>
</html>

Тут змінні x і d є глобальними. Вони доступні з будь-якого місця програми.

А ось змінна z глобальної не є, так як вона визначена всередині функції.


локальні змінні

Змінна, визначена всередині функції, є локальною:

function displaySquare(){
 
    var z = 10;
    console.log(z);
     
    let b = 8;
    console.log(b);
}

Змінні z та b є локальними, вони існують тільки в межах функції. Поза функції, їх не можна використовувати:

function displaySquare(){
 
    var z = 10;
    console.log(z);
}
console.log(z);          //помилка, так як z не оголошена глобальною змінною

Коли функція закінчує свою роботу, то всі змінні, визначені в функції, знищуються.


приховування змінних

Що якщо у нас є дві змінних - одна глобальна, а інша локальна, які мають однакове ім'я:

var z = 89;

function displaySquare(){
 
    var z = 10;
    console.log(z); // 10
}

displaySquare(); // 10

В цьому випадку у функції буде використовуватися та змінна z , яка визначена безпосередньо в функції. Тобто локальна змінна приховає глобальну.


var або let

При використанні оператора let кожен блок коду визначає нову область видимості, в якій існує змінна. Наприклад, ми можемо одночасно визначити змінну на рівні блоку і на рівні функції:

let z = 10;
function displayZ(){
  
    let z = 20;
     
    {
        let z = 30;
        console.log("Block:", z);
    }
     
    console.log("Function:", z);
}
 
displayZ();
console.log("Global:", z);

Тут усередині функції displayZ визначено блок коду, в якому визначена змінна z . Вона приховує глобальну змінну і змінну z ,  на рівні функції. У реальній програмі блок міг бути предеставляти вкладену функцію, блок циклу for або конструкції if . Але в будь-якому випадку такий блок визначає нову область видимості, поза якою змінна не існує.

І в даному випадку ми отримаємо наступний консольний результат:

За допомогою оператора var ми не можемо визначити одночасно змінну з одним і тим же ім'ям і в функції, і в блоці коду в цій функції:

function displaySquare(){
  
    var z = 20;
     
    {
        var z = 30; // Помилка! Змінна z вже визначена
        console.log("Block:", z);
    }
    console.log("Function:", z);
}

Тобто за допомогою var ми можемо визначити змінну з одним ім'ям або на рівні функції, або на рівні блоку коду.


константи

Все, що відноситься до оператора let , відноситься і до оператора const , який дозволяє визначити константи. Блоки коду задають область видимості констант, а константи, на вкладених блоках коду, приховують зовнішні константи з тим же ім'ям:

const z = 10;
function displayZ(){
  
    const z = 20;
     
    {
        const z = 30;
        console.log("Block:", z);   // 30
    }
    console.log("Function:", z);    // 20
}
 
displayZ();
console.log("Global:", z);  // 10

неоголошені змінні

Якщо ми не використовуємо це ключове слово при визначенні змінної у функції, то така змінна буде глобальною. наприклад:

function bar(){
    foo = "25";
}
bar();
console.log(foo);   // 25

Незважаючи на те, що поза функції bar змінна foo ніде не визначається, проте вона доступна поза функцією в зовнішньому контексті.

Інакше було б якби ми не тільки привласнювали значення змінної, а й визначали б його:

function bar(){
    var foo = "25";
}
 
bar();
console.log(foo);   // помилка

строгий режим

Визначення глобальних змінних у функціях може вести до потенційних помилок. Щоб їх уникнути використовується строгий режим або strict mode :

"use strict";

function bar(){
    foo = "25";
}
  
bar();
console.log(foo);

У цьому випадку ми отримаємо помилку SyntaxError: Unexpected identifier , яка говорить про те, що змінна foo не визначена.

Встановити режим strict mode можна двома способами:

  • додати вираз "use strict" в початок коду JavaScript, тоді strict mode буде застосовуватися для всього коду

  • додати вираз "use strict" в початок тіла функції, тоді strict mode буде застосовуватися тільки для цієї функції


Наш партнер:
beta test mp3 playlist downloader