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:

javascriptlet 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:

javascriptlet 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.

Задание 1

Määrake, ilma koodi käivitamata, mis väljub konsooli:

javascriptlet num = 1;

function func() {
  num = 2;
}
func();

console.log(num);
Задание 2

Määrake, ilma koodi käivitamata, mis väljub konsooli:

javascriptlet num = 1;

function func() {
  let num = 2;
}
func();

console.log(num);