Globalūs kintamieji funkcijose JavaScript
JavaScript (daugelyje kitų kalbų dažniausiai taip nėra) kintamieji, apibrėžti už funkcijos ribų, bus matūs šios funkcijos viduje. Tokie kintamieji vadinami globaliaisiais. Pažiūrėkime pavyzdžiu:
let num = 1; // kintamasis už funkcijos ribų
function func() {
console.log(num); // kintamasis num matomas funkcijos viduje
}
func(); // išves 1
Iš tikrųjų kintamasis turi būti apibrėžtas ne prieš funkcijos apibrėžimą, o prieš jos iškvietimą:
function func() {
console.log(num);
}
let num = 1; // kintamasis už funkcijos ribų
func(); // išves 1
Jei keičiate kintamojo reikšmę ir po to
kaskart iškviečiate funkciją - console.log kaskart
rodys skirtingus rezultatus:
function func() {
console.log(num);
}
let num; // apibrėžiame kintamąjį
num = 1; // nustatome reikšmę 1
func(); // išves 1
num = 2; // nustatome reikšmę 2
func(); // išves 2
Jei turime kelias funkcijas, tai globalusis kintamasis bus prieinamas kiekvienoje iš šių funkcijų:
function func1() {
console.log(num);
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // išves 1
func2(); // išves 1
Jei vienoje iš funkcijų bus atlikti pakeitimai su globaliuoju kintamuoju, tai šis kintamasis pakis visose funkcijose, naudojančiose šį kintamąjį:
function func1() {
console.log(num);
num++; // keičiame globalųjį kintamąjį
}
function func2() {
console.log(num);
}
let num = 1;
func1(); // išves 1
func2(); // išves 2
Kadangi bet kuri funkcija gali lengvai pakeisti globalųjį kintamąjį, tai jų naudojimas reiškia sunkiai pastebimų klaidų šaltinį. Dėl šios priežasties globalių kintamųjų naudojimas scenarijuje turi būti sumažinamas iki minimumo. Pageidautina, kad jų iš viso nebus arba būtų kuo mažesnis kiekis.
Nustatykite, neleisdami kodui, kas bus išvesta į konsolę:
let num = 1;
function func() {
console.log(num);
}
func();
Nustatykite, neleisdami kodui, kas bus išvesta į konsolę:
let num = 1;
function func() {
console.log(num);
}
num = 2;
func();
Nustatykite, neleisdami kodui, kas bus išvesta į konsolę:
function func() {
console.log(num);
}
let num;
num = 1;
func();
num = 2;
func();