Muutujate samanimed funktsioonides JavaScriptis
Olgu väljaspool funktsiooni ja sees olemas muutuja
num. Sel juhul ükski muutus
lokaalse muutujaga num ei mõjuta
mingil viisil globaalset muutujat num:
let num = 1; // globaalne muutuja
function func() {
let num = 2; // lokaalne muutuja
console.log(num);
}
func(); // kutsume funktsiooni, väljastab 2
console.log(num); // väljastab 1 - globaalne muutuja ei muutunud
Kuid kui me unustame deklareerida lokaalse muutuja
num läbi let, siis funktsiooni sees
ei looda lokaalset muutujat num,
vaid lihtsalt muudetakse globaalset muutujat:
let num = 1;
function func() {
num = 2; // unustasime kirjutada let - muudame välist muutujat
console.log(num);
}
func(); // kutsume funktsiooni, väljastab 2
console.log(num); // väljastab 2 - muutuja muutus
Siin võib olla kaks olukorda: kas me tegelikult
soovisime muuta globaalset muutujat (siis
kõik on korras) või me unustasime let ja kogemata
muutsime globaalset muutujat.
Teine juhtum on raskesti tabatav viga,
mis viib skripti ettearvamatu käitumiseni.
Seetõttu deklareerige alati uus muutuja
läbi let.
Määrake, ilma koodi käivitamata, mis väljub konsooli:
let num = 1;
function func() {
num = 2;
}
func();
console.log(num);
Määrake, ilma koodi käivitamata, mis väljub konsooli:
let num = 1;
function func() {
let num = 2;
}
func();
console.log(num);