Parametry vnější a vnitřní funkce v JavaScriptu

Udělejme to tak, aby jak vnější funkce tak i vnitřní přijímala parametry:

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

Předáme parametr vnější funkce do volání vnitřní funkce:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum); // vypíše 1
  }
  
  func(num); //!! předáváme parametr
}

test(1); // předáváme parametrem číslo

Vychází to tak, že ve vnitřní funkci bude dostupná proměnná num jako vnější proměnná z rodičovské funkce a proměnná localNum, která je lokální proměnnou vnitřní funkce.

Obě tyto proměnné budou mít stejné hodnoty:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(num); // vypíše 1
    console.log(localNum); // vypíše 1
  }
  
  func(num);
}

test(1);

Rozdíl mezi nimi bude v následujícím: pokud ve vnitřní funkci změníme proměnnou num - změní se i ve vnější funkci:

javascriptfunction test(num) {
  function func(localNum) {
    num = 2; // měníme proměnnou num
  }
  
  func(num);   // předáváme parametr
  console.log(num);  // vypíše 2
}

test(1); // předáváme parametrem číslo

A proměnná localNum bude lokální. Její změny nebudou vést k žádným změnám ve vnější funkci. A ani samotná proměnná localNum nebude vidět zvenčí vnitřní funkce:

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2; // měníme proměnnou num
  }
  
  func(num); // předáváme parametr
}

test(1); // předáváme parametrem číslo
Задание 1

Určete, bez spuštění kódu, co se vypíše do konzole:

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

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

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

Určete, bez spuštění kódu, co se vypíše do konzole:

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

test(1);