Параметри на външни и вътрешни функции в JavaScript

Нека направим така, че както външната функция, така и вътрешната да приемат параметри:

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

Нека предадем параметъра на външната функция при извикването на вътрешната функция:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(localNum); // ще изведе 1
  }
  
  func(num); //!! предаваме параметъра
}

test(1); // предаваме параметър число

Оказва се, че във вътрешната функция ще бъде достъпна променливата num като външна променлива от родителската функция и променливата localNum, която е локална променлива на вътрешната функция.

И двете от тези променливи ще имат еднакви стойности:

javascriptfunction test(num) {
  function func(localNum) {
    console.log(num); // ще изведе 1
    console.log(localNum); // ще изведе 1
  }
  
  func(num);
}

test(1);

Разликата между тях ще бъде в следното: ако във вътрешната функция се промени променливата num - тя ще се промени и във външната функция:

javascriptfunction test(num) {
  function func(localNum) {
    num = 2; // променяме променливата num
  }
  
  func(num);   // предаваме параметър
  console.log(num);  // ще изведе 2
}

test(1); // предаваме параметър число

А променливата localNum ще бъде локална. Промените в нея няма да доведат до никакви промени във външната функция. И самата променлива localNum няма да бъде видима отвън на вътрешната функция:

javascriptfunction test(num) {
  function func(localNum) {
    localNum = 2; // променяме променливата num
  }
  
  func(num); // предаваме параметър
}

test(1); // предаваме параметър число
Задание 1

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

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

Определете, без да стартирате кода, какво ще се изведе в конзолата:

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

test(1);