Parametri spoljne i unutrašnje funkcije u JavaScript-u

Hajde da napravimo tako da i spoljna funkcija i unutrašnja primaju parametre:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
}

Prosledimo parametar spoljne funkcije u poziv unutrašnje funkcije:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum); // ispisaće 1
  }
  
  func(num); //!! prosleđujemo parametar
}

test(1); // prosleđujemo parametrom broj

Ispada da će u unutrašnjoj funkciji biti dostupna promenljiva num kao spoljašnja promenljiva iz roditeljske funkcije i promenljiva localNum, koja je lokalna promenljiva unutrašnje funkcije.

Obe ove promenljive će imati iste vrednosti:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(num); // ispisaće 1
    console.log(localNum); // ispisaće 1
  }
  
  func(num);
}

test(1);

Razlika između njih će biti u sledećem: ako u unutrašnjoj funkciji promenimo promenljivu num - ona će se promeniti i u spoljnoj funkciji:

javascriptfunction test(num) {
  function func(localNum) {
    num = 2; // menjamo promenljivu num
  }
  
  func(num);   // prosleđujemo parametar
  console.log(num);  // ispisaće 2
}

test(1); // prosleđujemo parametrom broj

A promenljiva localNum će biti lokalna. Njeni izmeni neće dovesti ni do kakvih izmena u spoljnoj funkciji. Čak i sama promenljiva localNum neće biti vidljiva spolja iz unutrašnje funkcije:

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2; // menjamo promenljivu num
  }
  
  func(num); // prosleđujemo parametar
}

test(1); // prosleđujemo parametrom broj
Задание 1

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
  
  func(num);
}

test(1);
Задание 2

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum);
  }
  
  func(num + 1);
}

test(1);
Задание 3

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(num);
  }
  
  func(num + 1);
}

test(1);
Задание 4

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2;
  }
  
  func(num);
  console.log(num);
}

test(1);
Задание 5

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2;
  }
  
  func(num);
  console.log(localNum);
}

test(1);
Задание 6

Odredite, ne pokrećući kod, šta će se ispisati u konzoli:

javascriptfunction test(num) {
  function func(localNum) {
    num = 2;
  }
  
  func(num);
  console.log(num);
}

test(1);