გლობალური ცვლადები ფუნქციებში JavaScript-ში
JavaScript-ში (სხვა ენებში უმეტესად ასე არაა) ცვლადები, რომლებიც ფუნქციის გარეთაა განსაზღვრული, ხილვადი იქნება ამ ფუნქციის შიგნით. ასეთ ცვლადებს გლობალურები ჰქვია. შევხედოთ მაგალითს:
let num = 1; // ცვლადი ფუნქციის გარეთ
function func() {
console.log(num); // ცვლადი num ხილვადია ფუნქციის შიგნით
}
func(); // გამოიტანს 1
სინამდვილეში ცვლადი უნდა იყოს განსაზღვრული არა ფუნქციის განსაზღვრამდე, არამედ მის გამოძახებამდე:
function func() {
console.log(num);
}
let num = 1; // ცვლადი ფუნქციის გარეთ
func(); // გამოიტანს 1
თუ ცვლადის მნიშვნელობას შევცვლით და ამის შემდეგ
ყოველ ჯერზე გამოვიძახებთ ფუნქციას - console.log ყოველ
ჯერზე სხვადასხვა შედეგს გამოიტანს:
function func() {
console.log(num);
}
let num; // განვსაზღვროთ ცვლადი
num = 1; // მივანიჭოთ მნიშვნელობა 1
func(); // გამოიტანს 1
num = 2; // მივანიჭოთ მნიშვნელობა 2
func(); // გამოიტანს 2
თუ ჩვენ რამდენიმე ფუნქცია გვაქვს, მაშინ გლობალური ცვლადი იქნება ხელმისაწვდომი თითოეულ ამ ფუნქციაში:
function func1() {
console.log(num);
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // გამოიტანს 1
func2(); // გამოიტანს 1
თუ ერთ-ერთ ფუნქციაში გლობალურ ცვლადში ცვლილებები მოხდება, მაშინ ეს ცვლადი შეიცვლება ყველა იმ ფუნქციაში, რომელიც იყენებს ამ ცვლადს:
function func1() {
console.log(num);
num++; // ვცვლით გლობალურ ცვლადს
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // გამოიტანს 1
func2(); // გამოიტანს 2
რადგანაც ნებისმიერ ფუნქციას შეუძლია მარტივად შეცვალოს გლობალური ცვლადი, მათი გამოყენება ძნელად აღმოსაჩენი შეცდომების საბუდარია. ამ მიზეზით გლობალური ცვლადების გამოყენება სკრიპტში მინიმუმამდე უნდა დაიყვანოთ. სასურველია, რომ ისინი საერთოდ არ იყოს ან იყოს მინიმალური რაოდენობით.
განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:
let num = 1;
function func() {
console.log(num);
}
func();
განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:
let num = 1;
function func() {
console.log(num);
}
num = 2;
func();
განსაზღვრეთ, კოდის გაშვების გარეშე, რა გამოიტანს კონსოლში:
function func() {
console.log(num);
}
let num;
num = 1;
func();
num = 2;
func();