Ista imena promenljivih u funkcijama u JavaScriptu

Neka i izvan funkcije, i unutar nje postoji promenljiva num. U ovom slučaju bilo koja promena lokalne promenljive num ni na koji način ne utiče na globalnu promenljivu num:

javascriptlet num = 1; // globalna promenljiva

function func() {
  let num = 2; // lokalna promenljiva
  console.log(num);
}
func(); // pozivamo funkciju, ispisaće 2

console.log(num); // ispisaće 1 - globalna promenljiva se nije promenila

Ali, ako zaboravimo da deklarišemo lokalnu promenljivu num preko let, onda unutar funkcije neće biti kreirana lokalna promenljiva num, već će se jednostavno promeniti globalna promenljiva:

javascriptlet num = 1;

function func() {
  num = 2; // zaboravili smo da napišemo let - menjamo spoljnu promenljivu
  console.log(num);
}
func(); // pozivamo funkciju, ispisaće 2

console.log(num); // ispisaće 2 - promenljiva se promenila

Ovde mogu postojati dve situacije: ili smo zaista želeli da promenimo globalnu promenljivu (onda je sve u redu), ili smo zaboravili let i slučajno promenili globalnu promenljivu.

Drugi slučaj predstavlja teško uočljivu grešku, koja vodi ka nepredvidivom ponašanju skripte. Zato uvek, kada uvodite novu promenljivu deklarišite je preko let.

Задание 1

Odredite, bez pokretanja koda, šta će biti ispisano u konzolu:

javascriptlet num = 1;

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

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

Odredite, bez pokretanja koda, šta će biti ispisano u konzolu:

javascriptlet num = 1;

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

console.log(num);