გლობალური ცვლადები ფუნქციებში JavaScript-ში

JavaScript-ში (სხვა ენებში უმეტესად ასე არაა) ცვლადები, რომლებიც ფუნქციის გარეთაა განსაზღვრული, ხილვადი იქნება ამ ფუნქციის შიგნით. ასეთ ცვლადებს გლობალურები ჰქვია. შევხედოთ მაგალითს:

javascriptlet num = 1; // ცვლადი ფუნქციის გარეთ

function func() {
  console.log(num); // ცვლადი num ხილვადია ფუნქციის შიგნით
}

func(); // გამოიტანს 1

სინამდვილეში ცვლადი უნდა იყოს განსაზღვრული არა ფუნქციის განსაზღვრამდე, არამედ მის გამოძახებამდე:

javascriptfunction func() {
  console.log(num);
}

let num = 1; // ცვლადი ფუნქციის გარეთ
func();      // გამოიტანს 1

თუ ცვლადის მნიშვნელობას შევცვლით და ამის შემდეგ ყოველ ჯერზე გამოვიძახებთ ფუნქციას - console.log ყოველ ჯერზე სხვადასხვა შედეგს გამოიტანს:

javascriptfunction func() {
  console.log(num);
}

let num; // განვსაზღვროთ ცვლადი

num = 1; // მივანიჭოთ მნიშვნელობა 1
func();  // გამოიტანს 1

num = 2; // მივანიჭოთ მნიშვნელობა 2
func();  // გამოიტანს 2

თუ ჩვენ რამდენიმე ფუნქცია გვაქვს, მაშინ გლობალური ცვლადი იქნება ხელმისაწვდომი თითოეულ ამ ფუნქციაში:

javascriptfunction func1() {
  console.log(num);
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // გამოიტანს 1
func2(); // გამოიტანს 1

თუ ერთ-ერთ ფუნქციაში გლობალურ ცვლადში ცვლილებები მოხდება, მაშინ ეს ცვლადი შეიცვლება ყველა იმ ფუნქციაში, რომელიც იყენებს ამ ცვლადს:

javascriptfunction func1() {
  console.log(num);
  num++; // ვცვლით გლობალურ ცვლადს
}

function func2() {
  console.log(num);
}

let num = 1;

func1(); // გამოიტანს 1
func2(); // გამოიტანს 2

რადგანაც ნებისმიერ ფუნქციას შეუძლია მარტივად შეცვალოს გლობალური ცვლადი, მათი გამოყენება ძნელად აღმოსაჩენი შეცდომების საბუდარია. ამ მიზეზით გლობალური ცვლადების გამოყენება სკრიპტში მინიმუმამდე უნდა დაიყვანოთ. სასურველია, რომ ისინი საერთოდ არ იყოს ან იყოს მინიმალური რაოდენობით.

Задание 1

განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

func();
Задание 2

განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:

javascriptlet num = 1;
    
function func() {
  console.log(num);
}

num = 2;
func();
Задание 3

განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:

javascriptfunction func() {
  console.log(num);
}

let num;

num = 1;
func();

num = 2;
func();